这应该很容易,但由于某种原因,它不是:如何在bash脚本运行卷曲并保持结果的变量
试图运行一个简单的curl
命令,得到它的输出,并且做的东西与它。
cmd='curl -v -H "A: B" http://stackoverflow.com'
result=`$cmd | grep "A:"`
...
问题 - 标题“A:B”未发送。
curl命令的执行似乎忽略头文件参数,第二次以“B”作为主机运行curl(显然失败)。
有什么想法?
这应该很容易,但由于某种原因,它不是:如何在bash脚本运行卷曲并保持结果的变量
试图运行一个简单的curl
命令,得到它的输出,并且做的东西与它。
cmd='curl -v -H "A: B" http://stackoverflow.com'
result=`$cmd | grep "A:"`
...
问题 - 标题“A:B”未发送。
curl命令的执行似乎忽略头文件参数,第二次以“B”作为主机运行curl(显然失败)。
有什么想法?
这里的问题是,你在第一个命令中所做的只是将cmd设置为等于一个字符串。
尝试使用$(...)
到像这样执行的实际命令:
cmd=$(curl -v -H "A: B" http://stackoverflow.com)
这样做的结果将是从与卷曲请求实际输出的。
这已经回答了很多次看到这里例如Set variable to result of terminal command (Bash)
请记住,卷曲调试输出重定向到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'
我不知道你所看到的问题的?你的预期产出是多少? – Inian
@ elad-tabak我建议你应该总是检查命令的结果,就像我之前建议将任何变量存储一样。这将帮助您找到问题出在哪里 –