shell 我的脚本只获取最后一个curl请求的响应

js5cn81o  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(124)

我试图对数组的每个数据执行一个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"}}}

谢谢你,谢谢!
编辑提供一个最低限度的可复制版本,与结果,我从执行

scyqe7ek

scyqe7ek1#

从你的问题中的这行输出:

declare -a tableau=([0]=$'wsout-YDDEzn2h9Y9fJERB\r' [1]=$'wsout-CYzpWK2uMDGFn9Yr\r' [2]=$'wsout-RroeVzLsv6PxJ56A\r' [3]="wsout-8ts3sHe7NsE46mN6")

我们可以看到你的ID除了最后一个都包含回车符(用\r表示),去掉它们。这就是为什么只有最后一个ID起作用,以及为什么当你手工编写一个ID列表时,它也起作用。
我不能使用你的URL,因为它们需要在你的代码中填充TOKEN,所以这里是使用example.com的区别。
使用尾随CR:

$ url=$'https://www.example.com/index.html\r'
$ curl -s "$url"

如果没有尾随的CR,我们就没有输出:

$ url=$'https://www.example.com/index.html'
$ curl -s "$url" | head -3
<!doctype html>
<html>
<head>

我们得到预期的输出。
我不知道\r是从哪里来的,但我怀疑它是由你用来创建代码的任何编辑器添加的,或者更有可能的是,你在之前的问题迭代中提到的文件stateVersion.json的创建者。请参阅Why does my tool output overwrite itself and how do I fix it?了解有关CR以及如何删除它们的更多信息。

相关问题