簡體   English   中英

如何在 bash 腳本中將變量傳遞給 curl 命令?

[英]How to pass a variable to a curl command in a bash script?

我正在使用下面的 bash 代碼將 curl 命令的結果存儲在文本文件中。

cat /c/customer_files/Bain/artifacts1.txt
sample=$(curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer <my_token>' '<api_>' | jq -r '.items[] | .id')
echo "$sample" >> /c/my_files/artifacts1.txt

這會生成一個包含以下內容的文本文件:

606b69cff140fe0d98e78d2a
60a40910c403d464225343b5
607f1e14d514043adcf4a0f6
60c36c380093aa519b816554

現在,我想逐行遍歷這個文件。 我正在使用下面的代碼來做到這一點。

while read -r line; do
#reading each line
echo "Line No. $n : $line";
n=$((n+1))

這正如預期的那樣產生正確的結果。

Line No. 1 : 606b69cff140fe0d98e78d2a
Line No. 2 : 60a40910c403d464225343b5
Line No. 3 : 607f1e14d514043adcf4a0f6
Line No. 4 : 60c36c380093aa519b816554

我想通過下面的 json 主體將變量 $line 傳遞給 CURL 命令。

input_json="{"executable": "<some ID>", "keepTargetResources": true,"keepTargetRunProfiles": true,"advanced": {"artifactId": "$line","artifactType": "ACTION"}}"

但是,這會產生以下結果:

,artifactType: ACTION}}d6a50bb75bbe81, keepTargetResources: true,keepTargetRunProfiles: 
true,advanced: {artifactId: 606b69cff140fe0d98e78d2a
,artifactType: ACTION}}d6a50bb75bbe81, keepTargetResources: true,keepTargetRunProfiles: 
true,advanced: {artifactId: 60a40910c403d464225343b5
,artifactType: ACTION}}d6a50bb75bbe81, keepTargetResources: true,keepTargetRunProfiles: 
true,advanced: {artifactId: 607f1e14d514043adcf4a0f6
{executable: 60ca3bf02ed6a50bb75bbe81, keepTargetResources: true,keepTargetRunProfiles: 
true,advanced: {artifactId: 60c36c380093aa519b816554,artifactType: ACTION}}

它僅為最后一條記錄創建所需格式的輸出:

{executable: 60ca3bf02ed6a50bb75bbe81, keepTargetResources: 
true,keepTargetRunProfiles:true,advanced: {artifactId: 
60c36c380093aa519b816554,artifactType: ACTION}}

對於 1st 3 記錄,它看起來像是覆蓋了行首的內容。

我究竟做錯了什么? 請指教。

提前致謝。

JSON 需要將其變量和值用"括起來。使用\\以防止 shell 解釋"

額外的回車是一個謎......也許額外的line清理可以使它

更喜歡printf echo並使用"${line}"以提高安全性。

試試這個:

artifact_id="$(printf "%s" "${line}" | sed 's/^\(.*[^[:blank:]]\)[[:blank:]]*$/\1/g')"
input_json="{\"executable\": \"<some ID>\", \"keepTargetResources\": true,\"keepTargetRunProfiles\": true,\"advanced\": {\"artifactId\": \"${artifact_id}\",\"artifactType\": \"ACTION\"}}"

暫無
暫無

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

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