2017-02-15 65 views
2

这应该很容易,但由于某种原因,它不是:如何在bash脚本运行卷曲并保持结果的变量

试图运行一个简单的curl命令,得到它的输出,并且做的东西与它。

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

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

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

有什么想法?

+0

我不知道你所看到的问题的?你的预期产出是多少? – Inian

+0

@ elad-tabak我建议你应该总是检查命令的结果,就像我之前建议将任何变量存储一样。这将帮助您找到问题出在哪里 –

回答

3

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

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

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

这样做的结果将是从与卷曲请求实际输出的。

这已经回答了很多次看到这里例如Set variable to result of terminal command (Bash)

0

请记住,卷曲调试输出重定向到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'