bash:如何grep字段和循环,在字段响应时追加结果

bash:如何grep字段和循环,在字段响应时追加结果,bash,nexus,Bash,Nexus,我有一个bash脚本,它提取了我们使用REST api存储在nexus存储库中的一些工件: get_hosts() { curl --silent -X GET "https://foo.bar/service/rest/v1/search?maven.groupId=foo.bar.hosts" | jq '.items[].name' --raw-output | sort -u } do_work() { for hos

我有一个bash脚本,它提取了我们使用REST api存储在nexus存储库中的一些工件:

get_hosts()
{
    curl --silent -X GET "https://foo.bar/service/rest/v1/search?maven.groupId=foo.bar.hosts" |
        jq '.items[].name' --raw-output |
        sort -u
}

do_work()
{
    for host in $(get_hosts);
    do
        ...
    done
}
最近,由于工件数量超过了某个阈值,nexus使用了

许多RESTAPI使用分页策略来处理 具有可以返回大量项目的操作。这一策略 是围绕continuationToken和页面大小的概念构建的 确定可在一个列表中返回的最大项目数 单一反应

GET/service/rest/v1/?&continuationToken=88491cd1d185dd136f143f20c4e7d50c
问题:

如何修改我的
get_hosts
函数以grep获取
continuationToken
,并循环直到收到所有页面?

您可以尝试以下操作:

unset ct
get_hosts()
{
    res="$(curl -s "https://foo.bar/service/rest/v1/search?maven.groupId=foo.bar.hosts$ct" )"
    jq '.items[].name' --raw-output <<< "$res" | sort -u
    ct="&continuationToken=$(jq .continuationToken <<< "$res")"
}

do_work()
{
    while hosts="$(get_hosts)"; test -n "$hosts"
    do
        for host in $hosts;
        do
            ...
        done
    done
}
unset ct
获取主机()
{
res=“$(curl-s”https://foo.bar/service/rest/v1/search?maven.groupId=foo.bar.hosts$ct“”
jq'.items[].name'--原始输出
{
  "items" : [
    ...
  ],
  "continuationToken" : "88491cd1d185dd136f143f20c4e7d50c"
}
GET /service/rest/v1/<api>?<query>&continuationToken=88491cd1d185dd136f143f20c4e7d50c
unset ct
get_hosts()
{
    res="$(curl -s "https://foo.bar/service/rest/v1/search?maven.groupId=foo.bar.hosts$ct" )"
    jq '.items[].name' --raw-output <<< "$res" | sort -u
    ct="&continuationToken=$(jq .continuationToken <<< "$res")"
}

do_work()
{
    while hosts="$(get_hosts)"; test -n "$hosts"
    do
        for host in $hosts;
        do
            ...
        done
    done
}