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

Posted

技术标签:

【中文标题】如何在bash脚本中运行curl并将结果保存在变量中[重复]【英文标题】:How to run curl in bash script and keep the result in a variable [duplicate] 【发布时间】:2017-07-03 20:54:50 【问题描述】:

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

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

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

问题 - 标头“A: B”未发送。

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

有什么想法吗?

【问题讨论】:

不确定您遇到的问题?您的预期输出是什么? @elad-tabak 我建议您始终按照我的建议检查命令的结果,然后再将其存储在任何变量中。这将帮助您找到问题的确切位置 【参考方案1】:

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

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

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

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

这个问题已经回答了很多次了,比如Set variable to result of terminal command (Bash)

【讨论】:

【参考方案2】:

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

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

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

./***.sh 
> 'Test:1234'

【讨论】:

以上是关于如何在bash脚本中运行curl并将结果保存在变量中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

bash 脚本在变量中使用剪切命令并将结果存储在另一个变量中

如何在bash脚本中传递变量的双引号值作为curl命令的参数?

如何回显数学表达式的结果并将其保存到Bash中的变量中

如何在带有 bash 的 CURL 请求中使用变量?

在 gruntfile 中执行 shell 脚本并将结果分配给变量

将 curl POST 与 bash 脚本函数中定义的变量一起使用