如何解决bash:如何为字段和循环进行 grep,在字段响应时附加结果
我有一个 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 使用 pagination
许多 REST API 使用分页策略来处理 具有可以返回大量项目的操作。这个策略 是围绕 continuationToken 和页面大小的概念构建的 确定可以返回的最大项目数 单一回复。
GET /service/rest/v1/<api>?<query>
{
"items" : [
...
],"continuationToken" : "88491cd1d185dd136f143f20c4e7d50c"
}
GET /service/rest/v1/<api>?<query>&continuationToken=88491cd1d185dd136f143f20c4e7d50c
问题:
如何将我的 get_hosts
函数修改为对 continuationToken
进行 grep 并循环直到收到所有页面?
解决方法
你可以试试这个:
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。