如何管道或重定向curl -v的输出?

jon*_*rry 107 unix linux curl

由于某种原因,输出总是被打印到终端,无论我是通过2>或>还是重定向它.有办法解决这个问题吗?为什么会这样?

Sin*_*ion 117

添加-s(静音)选项以删除进度表,然后将stderr重定向到stdout以获取与响应正文相同的fd上的详细输出

curl -vs google.com 2>&1 | less
Run Code Online (Sandbox Code Playgroud)

  • 这适用于大多数网站,但由于某种原因,我的机器上的本地服务器仍然打印完整输出,即使我做'2>&1 | grep asdfasdfasdfasdfdfs`或者其他一些东西.包括标题的完整输出仍显示在控制台上.是否有一些其他流可以管道输入grep来提取我需要的一些数据? (3认同)
  • 您还可以使用 [`--stderr -`](https://unix.stackexchange.com/a/210294/209677)curl 参数将 stderr 重定向到 stdout。 (3认同)

小智 108

您的URL可能包含&符号.我也有这个问题,并且我意识到我的URL充满了&符号(来自传递的CGI变量),因此所有内容都以奇怪的方式发送到后台,因此无法正确重定向.如果您在URL周围加上引号,它将修复它.

  • Love Stack-O ...我发现了这个q,并在URL中提到了&符号.它引用了我的报价,问题解决了. (3认同)
  • 引号对我有用。我觉得curl正在其他线程中执行。非常感谢 ! (2认同)

Ami*_*ler 24

上面的答案对我不起作用,最终这个语法是什么:

curl https://${URL} &> /dev/stdout | tee -a ${LOG}

tee将输出放在屏幕上,但也将其附加到我的日志中.

  • `&> /dev/stdout` 绝对是缺少的部分,谢谢 (2认同)

小智 10

只是我的2分钱。正如前面所回答的,下面的命令应该可以解决问题

curl -vs google.com 2>&1
Run Code Online (Sandbox Code Playgroud)

但是,如果需要将输出输出到文件中,

curl -vs google.com > out.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

应该管用。

  • 这对 2011 年接受的答案没有增加任何实际价值。如果有的话,这可能是对该答案的评论。 (2认同)

pan*_*ter 8

如果您需要文件中的输出,则可以使用重定向:

curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

请确保不要翻转>curl-output.txtand 2>&1,由于bash的重定向行为,它不会起作用。