如何在Bash脚本中运行Curl并将结果保存到变量中

6

这本应该很容易,但出于某些原因它并不是:

尝试运行一个简单的curl命令,获取其输出,并对其进行操作。

cmd='curl -v -H "A: B" http://stackoverflow.com'
result=`$cmd | grep "A:"`
...

问题 - 头部信息“A:B”未被发送。
执行curl命令似乎忽略了头部参数,并且运行了两次curl命令 - 第二次使用“B”作为主机(显然失败)。
有任何想法吗?

我不确定您遇到的问题是什么?您的期望输出是什么? - Inian
@elad-tabak 我建议您在将命令存储到任何变量之前,始终检查命令的结果,就像我之前建议的那样。这将帮助您准确找到问题所在。 - Karan Shah
2个回答

12

你的问题在于第一个命令中,你只是将cmd设置为一个字符串。

尝试使用$(...)来执行实际的命令,像这样:

cmd=$(curl -v -H "A: B" http://stackoverflow.com)

这将会是使用curl请求的实际输出结果。

这个问题已经被回答了很多次,例如在这里:将变量设置为终端命令(Bash)的结果


5
请记住,cURL调试输出被重定向到STDERR - 这样您就可以将输出管道传输到另一个程序,而不会破坏管道的输入。
使用--stderr -标志将STDERR重定向到STDOUT,如下所示:
cmd="curl -s -v http://stackoverflow.com -H 'Test:1234' --stderr -"
result=`$cmd | grep "Test:"`
echo $result

./stackoverflow.sh 
> 'Test:1234'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接