如何在bash脚本中运行curl并将结果保存在变量中

时间:2017-02-15 09:23:57

标签: bash curl

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

尝试运行一个简单的curl命令,获取它的输出,并用它做任何事情。

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

问题 - 标题" A:B"没有发送。

执行curl命令似乎忽略了header参数,并运行curl两次 - 第二次使用" B"作为主持人(显然失败了)。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

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

尝试使用$(...)执行实际命令,如下所示:

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

结果将是curl请求的实际输出。

这已经多次回答,例如Set variable to result of terminal command (Bash)

答案 1 :(得分:1)

请记住,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'