-1

我在 bash 脚本中使用 AWX curl 更新模板。不知何故,这个 curl 命令无法运行

curl --insecure -v -X PATCH https://somedomain.corp.com/api/v2/job_templates/\"$test_2_template\"/ -H 'Authorization: Basic keys==' -H 'Content-Type: application/json' -d '{"extra_vars":"{\"module_name\": \"$module_name\", \"env\": \"$appenv\", \"host_group_name\": \"$host_group_name\", \"rolename\": \"$rolename\", \"app_artifact_url\": \"$app_artifact_url\"}"}'

看起来在通过 bash 将变量传递给 curl 命令时存在一些问题

但是,如果我从终端运行它,它工作正常。

curl --insecure -v -X PATCH https://somedomain.com/api/v2/job_templates/279/ -H 'Authorization: Basic keys==' -H 'Content-Type: application/json' -d '{"extra_vars":"{\"module_name\": \"myservice\", \"env\": \"test\", \"host_group_name\": \"env2\", \"rolename\": \"myservice\", \"artifact_version\": \"2.1.0-SNAPSHOT\"}"}'

请提出一些解决方案。

4

1 回答 1

2

您不能在单引号字符串中替换变量。

对于像这样可怕的长命令,将它们分成几部分对于可读性和可维护性至关重要:

data=$(printf \
    '{"extra_vars": "{\"module_name\": \"%s\", \"env\": \"%s\", \"host_group_name\": \"%s\", \"rolename\": \"%s\", \"app_artifact_url\": \"%s\"}"}' \
    "$module_name" "$appenv" "$host_group_name" "$rolename" "$app_artifact_url"
)
curl_args=(
    --insecure 
    -v 
    -X PATCH  
    -H 'Authorization: Basic keys==' 
    -H 'Content-Type: application/json' 
    -d "$data"
)
url="https://somedomain.example.com/api/v2/job_templates/$test_2_template/"

curl "${curl_args[@]}" "$url"
于 2019-11-12T22:25:40.893 回答