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

Ela*_*bak 3 bash curl

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

尝试运行一个简单的curl命令,获取它的输出,然后用它做一些事情.

cmd='curl -v -H "A: B" http://stackoverflow.com'
result=`$cmd | grep "A:"`
...
Run Code Online (Sandbox Code Playgroud)

问题 - 标题"A:B"未发送.

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

任何的想法?

小智 6

请记住,cURL 调试输出被重定向到 STDERR - 这样您就可以将输出通过管道传输到另一个程序,而不会破坏管道输入的信息。

使用标志将 STDERR 重定向到 STDOUT,--stderr -如下所示:

cmd="curl -s -v http://stackoverflow.com -H 'Test:1234' --stderr -"
result=`$cmd | grep "Test:"`
echo $result

./stackoverflow.sh 
> 'Test:1234'
Run Code Online (Sandbox Code Playgroud)


Bla*_*key 5

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

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

cmd=$(curl -v -H "A: B" http://stackoverflow.com)
Run Code Online (Sandbox Code Playgroud)

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

这已被多次回答,例如将set变量设置为终端命令(Bash)的结果