这应该很容易,但出于某种原因,它不是:
尝试运行一个简单的curl
命令,获取它的输出,并用它做任何事情。
cmd='curl -v -H "A: B" http://stackoverflow.com'
result=`$cmd | grep "A:"`
...
问题 - 标题" A:B"没有发送。
执行curl命令似乎忽略了header参数,并运行curl两次 - 第二次使用" B"作为主持人(显然失败了)。
有什么想法吗?
答案 0 :(得分:5)
你的问题是,你在第一个命令上所做的只是将cmd设置为等于一个字符串。
尝试使用$(...)
执行实际命令,如下所示:
cmd=$(curl -v -H "A: B" http://stackoverflow.com)
结果将是curl请求的实际输出。
答案 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'