从脚本

时间:2015-05-22 09:43:27

标签: bash shell curl soap

我有简单的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工作,没有脚本的回应

2 个答案:

答案 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