命令行 curl 流输出
command line curl stream output
我运行
curl -X POST 'http://172.24.0.40:4243/build?t=basejava8'
并获得 curl 输出
{"stream":"Step 0 : FROM phusion/baseimage:0.9.16\n"} {"stream":"
---\u003e 5a14c1498ff4\n"} {"stream":"Step 1 : CMD /sbin/my_init\n"} {"stream":" ---\u003e Using cache\n"} {"stream":" ---\u003e
9ca43c73f936\n"} {"stream":"Step 2 : RUN apt-get update \u0026\u0026
DEBIAN_FRONTEND=noninteractive apt-get install -y
ca-certificates\n"} {"stream":" ---\u003e Using cache\n"} {"stream":"
---\u003e b5dcbe0f1c27\n"} {"stream":"Step 3 : RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true
| debconf-set-selections \u0026\u0026 add-apt-repository -y
ppa:webupd8team/java \u0026\u0026 apt-get update \u0026\u0026
apt-get install -y oracle-java8-installer \u0026\u0026 apt-get
install -y oracle-java8-set-default \u0026\u0026 rm -rf
/var/lib/apt/lists/* \u0026\u0026 rm -rf
/var/cache/oracle-jdk8-installer\n"} {"stream":" ---\u003e Using
cache\n"} {"stream":" ---\u003e 4eaa2e3796a2\n"} {"stream":"Step 4 :
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle\n"} {"stream":" ---\u003e
Using cache\n"} {"stream":" ---\u003e 5d8bfb398fb6\n"}
{"stream":"Successfully built 5d8bfb398fb6\n"}
是否可以在输出中避免括号和 "stream",即通过 curl 参数作为纯文本?
您的问题与 curl
无关:您所看到的是服务(在本例中 Docker)实际为您提供的内容。
也就是说,虽然您可以尝试使用正则表达式提取所需的值,但我建议您改为使用 JSON 解析器来解析每一行。在您的示例中,每一行恰好看起来像 {"stream":"..."}
,但 Docker API 文档中的示例显示错误也表示为 JSON 流线:
HTTP/1.1 200 OK
Content-Type: application/json
{"stream": "Step 1..."}
{"stream": "..."}
{"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
在命令行上进行 JSON 解析的一个有用工具是 jq。如果您只想要每一行的 stream
键的原始 (-r
) 值,您可以这样做:
curl -X POST '...' | jq -r .stream
这将忽略(打印空行)输入中的非流线。
有关详细信息,请参阅 Docker documentation and the jq manual。
我运行
curl -X POST 'http://172.24.0.40:4243/build?t=basejava8'
并获得 curl 输出
{"stream":"Step 0 : FROM phusion/baseimage:0.9.16\n"} {"stream":" ---\u003e 5a14c1498ff4\n"} {"stream":"Step 1 : CMD /sbin/my_init\n"} {"stream":" ---\u003e Using cache\n"} {"stream":" ---\u003e 9ca43c73f936\n"} {"stream":"Step 2 : RUN apt-get update \u0026\u0026
DEBIAN_FRONTEND=noninteractive apt-get install -y
ca-certificates\n"} {"stream":" ---\u003e Using cache\n"} {"stream":" ---\u003e b5dcbe0f1c27\n"} {"stream":"Step 3 : RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections \u0026\u0026 add-apt-repository -y ppa:webupd8team/java \u0026\u0026 apt-get update \u0026\u0026
apt-get install -y oracle-java8-installer \u0026\u0026 apt-get install -y oracle-java8-set-default \u0026\u0026 rm -rf /var/lib/apt/lists/* \u0026\u0026 rm -rf /var/cache/oracle-jdk8-installer\n"} {"stream":" ---\u003e Using cache\n"} {"stream":" ---\u003e 4eaa2e3796a2\n"} {"stream":"Step 4 : ENV JAVA_HOME /usr/lib/jvm/java-8-oracle\n"} {"stream":" ---\u003e Using cache\n"} {"stream":" ---\u003e 5d8bfb398fb6\n"} {"stream":"Successfully built 5d8bfb398fb6\n"}
是否可以在输出中避免括号和 "stream",即通过 curl 参数作为纯文本?
您的问题与 curl
无关:您所看到的是服务(在本例中 Docker)实际为您提供的内容。
也就是说,虽然您可以尝试使用正则表达式提取所需的值,但我建议您改为使用 JSON 解析器来解析每一行。在您的示例中,每一行恰好看起来像 {"stream":"..."}
,但 Docker API 文档中的示例显示错误也表示为 JSON 流线:
HTTP/1.1 200 OK
Content-Type: application/json
{"stream": "Step 1..."}
{"stream": "..."}
{"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
在命令行上进行 JSON 解析的一个有用工具是 jq。如果您只想要每一行的 stream
键的原始 (-r
) 值,您可以这样做:
curl -X POST '...' | jq -r .stream
这将忽略(打印空行)输入中的非流线。
有关详细信息,请参阅 Docker documentation and the jq manual。