嗨,我正在运行一个 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 循环。
听起来你想要类似的东西:
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 了解为什么我使用上述语法而不是管道来循环命令的输出。