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

时间:2011-03-25 01:03:47

标签: linux unix curl

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

8 个答案:

答案 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脚本中使用它

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 

答案 7 :(得分:-1)

只需2美分。 正如前面回答的那样,下面的命令应该可以解决问题

curl -vs google.com 2>&1

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

curl -vs google.com > out.txt 2>&1

应该有用。