簡體   English   中英

使用 bash 中的變量執行 curl 命令

[英]Executing curl command with variables in bash

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

請提出一些解決方案。

您不能在單引號字符串中替換變量。

對於像這樣可怕的長命令,將它們分成幾部分對於可讀性和可維護性至關重要:

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM