使用bash中的变量执行curl命令

时间:2019-11-12 22:09:04

标签: bash unix curl ansible-awx

我在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\"}"}'

请提出一些解决方案。

1 个答案:

答案 0 :(得分: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"
相关问题