【发布时间】:2015-05-22 09:43:26
【问题描述】:
我有简单的 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
脚本 sn-p
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 工作,脚本没有响应
【问题讨论】:
-
您可以通过在您想查看脚本正在做什么的部分中包含
set -xv来调试您的脚本。它比使用echo命令更可靠。 -
这很有帮助。 Bash 已经从这个信封中逃脱了垃圾,所以难怪它不起作用。我想我的解决方法并不像我想象的那样丑陋。