如何pipe道或redirectcurl -v的输出?

出于某种原因,输出总是被打印到terminal,无论是通过2>还是>或者|来redirect。 有没有办法解决这个问题? 为什么发生这种情况?

添加-s (无声)选项以删除进度表,然后将stderr重定向到stdout以在响应主体的相同fd上获取详细输出

 curl -vs google.com 2>&1 | less 

您的网址可能包含“&”符号。 我也遇到了这个问题,并且我意识到我的URL充满了&符号(从CGI变量被传递过来),所以一切都以奇怪的方式发送到后台,因此不能正确的重定向。 如果你在URL上加引号,它会修复它。

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

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

tee把输出放在屏幕上,但也附加到我的日志。

我发现了同样的事情:卷曲本身会打印到标准输出,但不能传送到另一个程序。

起初,我以为我已经通过使用xargs首先回显输出来解决它:

 curl -s ... <url> | xargs -0 echo | ... 

但是,正如评论中所指出的那样,它也可以在没有xargs部分的情况下工作,所以-s (无声模式)是防止无关进度输出到STDOUT的关键:

 curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/' 

上面的例子从curl语句的XML输出中抓取简单的<sometag>内容(不包含嵌入的标签)。

以下为我工作:

把你的curl语句放在名为abc.sh的脚本中

现在运行:

 sh abc.sh 1>stdout_output 2>stderr_output 

你会得到你的curl的结果在stdout_outputstdout_output的进度信息。

这个简单的例子展示了如何捕获curl输出,并将其用在bash脚本中

test.sh

 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 

只是我2美分。 下面的命令应该做的伎俩,如前面回答curl -vs google.com 2>&1

但是,如果需要将输出到一个文件,curl -vs google.com> out.txt 2>&1

应该管用。