我试图对数组的每个数据执行一个curl请求,但实际上我只得到其中一个答案(即使所有的url都没问题,请求一个接一个地工作)
我的脚本如下:
tmp="{
\"data\":{
\"id\":\"sv-Ps7epZJypQGB4Jb3\",
\"type\":\"state-versions\",
\"relationships\":{
\"outputs\":{
\"data\":[
{
\"id\":\"wsout-YDDEzn2h9Y9fJERB\",
\"type\":\"state-version-outputs\"
},
{
\"id\":\"wsout-CYzpWK2uMDGFn9Yr\",
\"type\":\"state-version-outputs\"
},
{
\"id\":\"wsout-RroeVzLsv6PxJ56A\",
\"type\":\"state-version-outputs\"
},
{
\"id\":\"wsout-8ts3sHe7NsE46mN6\",
\"type\":\"state-version-outputs\"
}
]
}
}
}
}"
echo "$tmp"
output_ids=$(echo "${tmp}" | jq -r '.data.relationships.outputs.data[].id')
echo "iic"
base_url="https://app.terraform.io/api/v2/state-version-outputs/"
declare -a tableau
# Créez un fichier temporaire contenant le texte
tempfile=$(mktemp)
echo "$output_ids" > "$tempfile"
# Parcourez chaque ligne du fichier et ajoutez-la au tableau
while IFS= read -r ligne; do
tableau+=("$ligne")
done < "$tempfile"
# Supprimez le fichier temporaire
cat "$tempfile"
rm "$tempfile"
declare -p tableau
# Accédez aux éléments du tableau
for element in "${tableau[@]}"; do
echo "Élément du tableau : $element"
full_url="$base_url$element"
echo "URL : $full_url"
output_details=$(curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
-s "$full_url")
echo "$output_details"
done
错误的结果:
{
"data":{
"id":"sv-Ps7epZJypQGB4Jb3",
"type":"state-versions",
"relationships":{
"outputs":{
"data":[
{
"id":"wsout-YDDEzn2h9Y9fJERB",
"type":"state-version-outputs"
},
{
"id":"wsout-CYzpWK2uMDGFn9Yr",
"type":"state-version-outputs"
},
{
"id":"wsout-RroeVzLsv6PxJ56A",
"type":"state-version-outputs"
},
{
"id":"wsout-8ts3sHe7NsE46mN6",
"type":"state-version-outputs"
}
]
}
}
}
}
wsout-YDDEzn2h9Y9fJERB
wsout-CYzpWK2uMDGFn9Yr
wsout-RroeVzLsv6PxJ56A
wsout-8ts3sHe7NsE46mN6
declare -a tableau=([0]=$'wsout-YDDEzn2h9Y9fJERB\r' [1]=$'wsout-CYzpWK2uMDGFn9Yr\r' [2]=$'wsout-RroeVzLsv6PxJ56A\r' [3]="wsout-8ts3sHe7NsE46mN6")
Élément du tableau : wsout-YDDEzn2h9Y9fJERB
URL : https://app.terraform.io/api/v2/state-version-outputs/wsout-YDDEzn2h9Y9fJERB
Élément du tableau : wsout-CYzpWK2uMDGFn9Yr
URL : https://app.terraform.io/api/v2/state-version-outputs/wsout-CYzpWK2uMDGFn9Yr
Élément du tableau : wsout-RroeVzLsv6PxJ56A
URL : https://app.terraform.io/api/v2/state-version-outputs/wsout-RroeVzLsv6PxJ56A
Élément du tableau : wsout-8ts3sHe7NsE46mN6
URL : https://app.terraform.io/api/v2/state-version-outputs/wsout-8ts3sHe7NsE46mN6
{"data":{"id":"wsout-8ts3sHe7NsE46mN6","type":"state-version-outputs","attributes":{"name":"db_username","sensitive":false,"type":"string","value":"diagngrowdbuser","detailed-type":"string"},"links":{"self":"/api/v2/state-version-outputs/wsout-8ts3sHe7NsE46mN6"}}}
谢谢你,谢谢!
编辑提供一个最低限度的可复制版本,与结果,我从执行
1条答案
按热度按时间scyqe7ek1#
从你的问题中的这行输出:
我们可以看到你的ID除了最后一个都包含回车符(用
\r
表示),去掉它们。这就是为什么只有最后一个ID起作用,以及为什么当你手工编写一个ID列表时,它也起作用。我不能使用你的URL,因为它们需要在你的代码中填充
TOKEN
,所以这里是使用example.com的区别。使用尾随CR:
如果没有尾随的CR,我们就没有输出:
我们得到预期的输出。
我不知道
\r
是从哪里来的,但我怀疑它是由你用来创建代码的任何编辑器添加的,或者更有可能的是,你在之前的问题迭代中提到的文件stateVersion.json
的创建者。请参阅Why does my tool output overwrite itself and how do I fix it?了解有关CR以及如何删除它们的更多信息。