代码之家  ›  专栏  ›  技术社区  ›  Steve Lorimer

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

  •  0
  • Steve Lorimer  · 技术社区  · 3 年前

    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

    许多restapi使用分页策略来处理 可以返回大量项目的操作。这个策略 是围绕continuationToken和页面大小的概念构建的 单一响应。

    GET /service/rest/v1/<api>?<query>
    
    {
      "items" : [
        ...
      ],
      "continuationToken" : "88491cd1d185dd136f143f20c4e7d50c"
    }
    
    GET /service/rest/v1/<api>?<query>&continuationToken=88491cd1d185dd136f143f20c4e7d50c
    

    如何修改我的 get_hosts continuationToken ,并循环直到收到所有页面?

    0 回复  |  直到 3 年前
        1
  •  1
  •   Philippe    3 年前

    你可以试试这个:

    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
    }