向stderr报告HTTP响应标头?

Naf*_*Kay 5 curl

我已经使用curl -i http://website.com了很长时间了。很棒,它报告了响应头和信息。

我还使用了一种jq可以解析和打印JSON 的工具。我想做以下事情:

curl -i http://website.com | jq -r .
Run Code Online (Sandbox Code Playgroud)

问题是HTTP标头转发到jq

有没有一种方法可以重定向-i到标准错误?

Zme*_*mey 18

试试这个命令:

curl -s -D /dev/stderr http://www.website.com/... | jq

  • 这正是OP想要的。`-D /dev/stderr` 将标头写入 stderr,`-s` 删除进度条。我经常添加“-S”,因此如果curl失败,我仍然会收到错误(否则“-s”会隐藏)。 (5认同)

小智 3

由于我今天遇到了一些问题,我想出了使用:

curl -i http://some-server/get.json | awk '{ sub("\r$", ""); print }' | awk -v RS= 'NR==1{print > "/dev/stderr";next} 1' > /dev/stdout  | jq .
Run Code Online (Sandbox Code Playgroud)

很可能不是最好的解决方案,但它对我有用。

说明:第一个 awk 程序只会将 windows 新行转换为 unix 新行。

在第二个程序中将-v RS=指示 awk 使用一个或多个空行作为记录分隔符[1]NR==1{print > "/dev/stderr";next}将打印第一条记录 (NR==1) 到 stderr,下一条语句强制 awk 立即停止处理当前记录并继续处理下一条记录[2]只是[3]1的简写。{print $0}

[1] /sf/answers/2330851491/
[2] https://www.gnu.org/software/gawk/manual/html_node/Next-Statement.html
[3] https://stackoverflow.com /a/20263611