将 bash 命令输出流式传输到 cURL 中

问题描述 投票:0回答:1

嗨,我正在运行一个 bash 命令,它会传输如下所示的输出数据:

nats sub demo.1 --queue demo -r | jq
{
  "count": "8",
  "time": "2024-05-15T12:51:41+01:00",
  "token": "eyJhbGciOiJFUzI1NiIsIm....",
  "name": "abc"
}
{
  "count": "10",
  "time": "2024-05-15T12:51:42+01:00",
  "token": "eyJhbGciOiJFUzI1NiIsIm....",
  "name": "abc"
}
{
  "count": "11",
  "time": "2024-05-15T12:51:42+01:00",
  "token": "eyJhbGciOiJFUzI1NiIsIm....",
  "name": "abc"
}

请注意,每个输出块都是一个单独的实体,我将其传递到

jq
以本质上美化它。

但是,我需要将输出通过管道传输到类似这样的

cURL
命令中。

curl 'https://localhost:8289/v1/certificatesigningrequest' \
--header 'Content-Type: application/json' \
 -H "Authorization: Bearer jq.token" \
--data '{
    "input": jq.name,
}' -k -s 

我研究过使用 while 循环,但是像这样:

while [ nats sub demo.1 --queue demo -r ]
do
 curl ....
done

但是,该命令似乎没有进入 do 循环。

bash curl
1个回答
0
投票

听起来你想要类似的东西:

while IFS= read -r name; do
    curl 'https://localhost:8289/v1/certificatesigningrequest' \
        --header 'Content-Type: application/json' \
        -H "Authorization: Bearer jq.token" \
        --data '{
            "input": "$name",
        }
    ' -k -s 
done < <(nats sub demo.1 --queue demo -r | jq.name)

请参阅 https://mywiki.wooledge.org/BashFAQ/001 了解为什么我使用上述语法而不是管道来循环命令的输出。

© www.soinside.com 2019 - 2024. All rights reserved.