由于某种原因,输出总是被打印到终端,无论我是否通过2>重定向它。或者>或者。有办法解决这个问题吗?为什么会这样?
答案 0 :(得分:103)
添加-s
(无声)选项以删除进度表,然后将stderr重定向到stdout以获取与响应正文相同的fd上的详细输出
curl -vs google.com 2>&1 | less
答案 1 :(得分:99)
您的网址可能包含&符号。我也有这个问题,并且我意识到我的URL充满了&符号(来自传递的CGI变量),因此所有内容都以奇怪的方式发送到后台,因此无法正确重定向。如果你在网址上加上引号,就会修复它。
答案 2 :(得分:21)
上面的答案对我没有用,最终这个语法是什么:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
将输出放在屏幕上,但也将其附加到我的日志中。
答案 3 :(得分:5)
如果您需要文件中的输出 ,则可以使用重定向:
malloc()
请务必不要翻转因bash's redirection behavior而无效的curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
和>curl-output.txt
。
答案 4 :(得分:3)
我发现了同样的事情:卷曲本身会打印到STDOUT,但无法通过管道传输到另一个程序。
起初,我以为我已经通过使用xargs首先回显输出来解决它:
curl -s ... <url> | xargs -0 echo | ...
但是,正如评论中指出的那样,它也可以在没有xargs部分的情况下工作,因此-s
(静默模式)是防止无关进度输出到STDOUT的关键:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
上面的示例从curl语句的XML输出中获取简单的<sometag>
内容(不包含嵌入的标记)。
答案 5 :(得分:0)
以下对我有用:
将curl语句放在名为abc.sh
现在运行:
sh abc.sh 1>stdout_output 2>stderr_output
您将获得stdout_output
中的卷曲结果以及stderr_output
中的进度信息。
答案 6 :(得分:0)
这个简单的例子展示了如何捕获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
答案 7 :(得分:-1)
只需2美分。 正如前面回答的那样,下面的命令应该可以解决问题
curl -vs google.com 2>&1
但是如果需要将输出发送到文件,
curl -vs google.com > out.txt 2>&1
应该有用。