迭代json对象,并使用jq将curl命令作为json输出中的变量运行,

ulydmbyx  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(178)

我希望在迭代json对象时过滤它,并对输出中的每个项运行curl命令。
JSON对象。

{
  "repo": "releases",
  "path": "/apps/releases",
  "created": "2021-04-01T10:12:23.496-01:00",
  "children": [
    {
      "uri": "/Image1",
      "folder": true,
      "created": 2022-08-09T17.12.22.987.04.000
    },
    {
      "uri": "/Image2",
      "folder": true,
      "created": 2022-06-10T10.12.22.412.10.000
    },
    {
      "uri": "/Image3",
      "folder": true,
      "created": 2022-10-10T07.03.14.742.01.000
    },
    {
      "uri": "/Image4",
      "folder": true,
      "created": 2022-10-10T07.010.11.542.08.000
    }
  ]
}

寻找一些逻辑,这些逻辑将迭代通过children下的uri,并作为$i通过curl命令传递,即Image 1、Image 2和Image 3。

curl -k -s --user user:password -X GET "https://artifactory.com/api/releases/baseimage/${i}"

当我运行下面的命令时,输出如下

for i in $(curl -k -s --user user:password -X GET      "https://artifactory.com/api/releases/baseimage/" | jq -c ".children[] |.uri)

输出:["/图像1”、“/图像2”、“/图像3”]
我尝试了以下命令,但在输出中,它只将${i}替换为Image 3,不知何故,它没有使用Image 1和Image 2。

for i in $(curl -k -s --user user:password -X GET "https://artifactory.com/api/releases/baseimage/" | jq -r ".children[] |.uri); do curl -k -s --user user:password -X GET "https://artifactory.com/api/releases/baseimage/${i}"; done

我尝试了以下命令,但在输出中,它只将${i}替换为Image 3,不知何故,它没有使用Image 1和Image 2。

unftdfkk

unftdfkk1#

curl可以读取要从文件中获取的URL,您可以使用jq生成该文件。

base=https://artifactory.com/api/releases/baseimage
curl -k -s --user user:password -X GET "$base/" |
   jq -r --arg b "$base" '.children[].uri | "url = \"\($b)/\(.)\""' |
   curl -k -s --user user:password -X GET --config -

只需要一个curl进程来获取所有单独的图像,并且不需要shell循环。

1l5u6lss

1l5u6lss2#

您可能会发现,沿着以下代码行构造for循环更容易:

for uri in $( echo "$json" | jq '.children[].uri') ; do 
  echo curl ... ${uri}...
done

相关问题