Bash脚本:帮助找到错误

时间:2014-02-06 09:55:58

标签: bash curl

我正在尝试运行此脚本以通过RightScale的API执行导入操作,但它会继续为第二个CURL操作报告“BAD请求400”,并且看起来URL未正确形成。我也尝试将POST URL放在双引号中,但这并没有改变结果。

AccountList.txt和TemplateList.txt分别有帐号和模板号,每行一个。为了调试,我只在每个文件中放了一个帐号和模板号。

请帮助我理解这段代码有什么问题。我猜这是微不足道的,但我无法理解那是什么:

cat "AccountList.txt" | while read acc ; do
        rm scriptcookie
        curl -i -H 'X-API-VERSION:1.5' -c scriptcookie -d email="emailid@company.com" -d password="p@sswd" -X POST -d account_href="/api/accounts/$acc" https://my.rightscale.com/api/sessions 

        cat "TemplateList.txt" | while read temp ; do   
                echo $temp
                curl -i -H 'X_API_VERSION:1.5' -b ./scriptcookie -X POST https://my.rightscale.com/api/publications/$temp/import

        done
echo "Done for Account:" $acc    
done

这是我看到的输出:

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.4.2</center>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

事实证明我的Debian Squeeze版本的bash(4.1.5)正在向$ temp变量插入一个回车'/ r'字符。

当我在Cygwin for Windows上运行相同的脚本并且脚本运行没有问题时,我想到了这一点。还要感谢@Mark Setchell提出的“-xv”标志,没有这个标志,我从来没有想过原因。

这是Debian v / s Cygwin上“echo $ temp”行之间的比较:

Debian(bash-4.1.5):

++ echo $'184605\r'

Cygwin(bash-4.1.11):

+ echo 184605

为什么会这样?我无法回答这个问题,但我很高兴我发现它与Bash版本本身有关。谢谢大家!