Answers:
添加-s
(silent)选项以删除进度表,然后将stderr重定向到stdout以在与响应正文相同的fd上获取详细输出
curl -vs google.com 2>&1 | less
2>&1
。
您的网址中可能包含与号。我也遇到了这个问题,我意识到我的URL充满了&符号(来自传递的CGI变量),因此所有内容都以一种怪异的方式发送到后台,因此无法正确重定向。如果在URL周围加上引号,它将对其进行修复。
上面的答案对我没有用,最终的语法是:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee将输出显示在屏幕上,但也将其附加到我的日志中。
&> /dev/stdout
绝对是缺少的部分,谢谢
如果您需要文件中的输出,则可以使用重定向:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
请确保不要翻转>curl-output.txt
and 2>&1
,由于bash的重定向行为,它不会起作用。
我发现了同样的事情:curl本身会打印到STDOUT,但无法通过管道传递到另一个程序中。
起初,我以为我已经通过使用xargs首先回显输出来解决了它:
curl -s ... <url> | xargs -0 echo | ...
但是然后,正如注释中指出的那样,它也可以在没有xargs部分的情况下工作,因此-s
(静默模式)是防止将无关的进度输出到STDOUT的关键:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
上面的示例<sometag>
从curl语句的XML输出中获取简单内容(不包含嵌入式标签)。
只是我的2美分。如前所述,下面的命令应该可以解决问题
curl -vs google.com 2>&1
但是,如果需要将输出保存到文件中,
curl -vs google.com > out.txt 2>&1
应该管用。
这个简单的示例显示了如何捕获curl输出,并在bash脚本中使用它
function main
{
\curl -vs 'http://google.com' 2>&1
# note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file.
}
# capture output of curl to a variable
OUT=$(main)
# search output for something using grep.
echo
echo "$OUT" | grep 302
echo
echo "$OUT" | grep title
curl -v url 2>&1
,错误将被正确重定向到我的标准输出。