使用身份验证时卷曲退出状态代码问题

时间:2016-05-05 07:03:28

标签: bash curl

我正在编写脚本以检查是否可以使用curl从远程服务器下载文件。如果下载文件时出现问题或文件不存在,脚本将报告。我使用以下代码段:

curl --fail -u "$USERNAME:$PASSWORD" --remote-name "$HOST/$FILEPATH"
if [ $? -ne 0 ]
then
echo "There is some error in Downloading file from $HOST";
else
echo "Download success";
fi

但是我总是将退出状态代码设置为0.这是因为curl总是下载文件(即使文件不存在),你可以在该文件中找到实际的错误信息。

那么如何获得真正的卷曲退出状态代码(找不到22个文件)?

1 个答案:

答案 0 :(得分:2)

如果是http协议,

--fail将返回错误代码22 返回代码可能与其他协议不同,例如ftp。见下文:

me@udistro:~$ curl --fail ftp://ftp.redhat.com/redhat/brms/6.2.0/en/source/MD5 
curl: (78) RETR response: 550
me@udistro:~$ echo $?
78

但正如手册页所述:

  

此方法不是故障安全的,并且有时会出现这种情况   不成功的响应代码将会漏掉,特别是在   涉及认证(响应代码401和407)。

作为起点,你可以试试这个:

curl --fail -u "$USERNAME:$PASSWORD" --remote-name "$HOST/$FILEPATH"
var=$?

if [ $var -ne 78 ] && [ $var -ne 22 ]
then
    echo "Success"
else
    echo "Failed"
fi