Bash 使用身份验证时出现退出状态代码问题

Bash 使用身份验证时出现退出状态代码问题,bash,curl,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

我正在编写一个脚本来检查是否可以使用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总是下载该文件(即使该文件不存在),您可以在该文件中找到实际的错误消息

那么我如何才能获得真正的curl退出状态代码(未找到22个文件)?

--fail
在使用http协议和 对于其他协议(如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
--fail
在使用http协议和 对于其他协议(如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