我有简单的bash脚本包装curl,以便从文件中读取消息和标题,然后构建curl命令,执行它并读取响应。
脚本还打印出正在运行的完整命令。当我直接从shell运行这个打印的命令时,我得到了预期的响应,但是当它在脚本中运行时,响应为空。
在脚本中运行时,curl是否有任何秘密行为更改?
生成命令:
curl -s -H 'Content-Type: application/soap+xml;charset=UTF-8;action="http://soap.xxxxxx/yyyyy/zzzzz"' --data-ascii '<soap:Envelope xmlns:soap (...) full message xml</soap:Envelope>' http://xx.xx.xx.xx:yyyy/yyyyy/zzzzz
脚本代码段
cmdline='curl -s '
if [[ -n $header ]]
then
cmdline="$cmdline -H '$header'"
fi
if [[ -n $message ]]
then
cmdline=$cmdline" --data-ascii '"$message"'"
fi
cmdline="$cmdline $target"
echo $cmdline
response=$($cmdline)
echo response:
echo $response
echo EOF
我尝试使用--output开关将响应重定向到文件但没有生成文件。就像我说的 - 从shell工作,没有脚本的回应
答案 0 :(得分:0)
我仍然不知道为什么原始脚本不起作用,但我找到了解决方法。我仍然生成curl命令,但不是运行它,而是将其转储到文件中然后运行此文件。
tmpscr=/tmp/runws_$(date +%s).sh
echo $cmdline > $tmpscr
chmod +x $tmpscr
response=$($tmpscr)
rm $tmpscr
答案 1 :(得分:0)
错误未被复制,测试结果正常:
$ cat prueba.sh
target=www.google.com
...your script.
$ ./prueba.sh
curl -s www.google.com
response:
... the html answer
EOF
*第二次测试也通过*
$ cat prueba.sh
message='<soap:Envelope xmlns:soap (...) full message xml</soap:Envelope>'
header='http://soap.xxxxxx/yyyyy/zzzzz'
target=www.google.com
... remainder script
$ ./prueba.sh
curl -s -H 'http://soap.xxxxxx/yyyyy/zzzzz' --data-ascii '<soap:Envelope xmlns:soap (...) full message xml</soap:Envelope>' www.google.com
response:
...html