如何pipe道或redirectcurl -v的输出?
出于某种原因,输出总是被打印到terminal,无论是通过2>还是>或者|来redirect。 有没有办法解决这个问题? 为什么发生这种情况?
添加-s
(无声)选项以删除进度表,然后将stderrredirect到stdout以获得与响应正文相同的fd的详细输出
curl -vs google.com 2>&1 | less
您的url可能包含“&”符号。 我也遇到了这个问题,并且我意识到我的URL充满了&符号(从CGIvariables被传递过来),所以一切都以奇怪的方式发送到后台,因此不能正确地redirect。 如果你在URL上加引号,它会修复它。
上面的答案对我不起作用,最后是这个语法:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee把输出放在屏幕上,但也附加到我的日志。
我发现同样的事情:curl本身会打印到标准输出,但不能传送到另一个程序。
起初,我以为我已经通过使用xargs首先回显输出来解决它:
curl -s ... <url> | xargs -0 echo | ...
但是,正如评论中指出的那样,它也可以在没有xargs部分的情况下工作,所以-s
(无声模式)是防止无关进度输出到STDOUT的关键:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
上面的例子从curl语句的XML输出中抓取简单的<sometag>
内容(不包含embedded的标签)。
以下为我工作:
把你的curl语句放在名为abc.sh
的脚本中
现在运行:
sh abc.sh 1>stdout_output 2>stderr_output
你会得到你的curl的结果在stdout_output
和stdout_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
应该pipe用。