2016-05-05 54 views
0

我正在編寫一個腳本來檢查是否可以使用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,這是因爲捲曲總是下載文件(即使該文件不存在),你可以找到實際的錯誤該文件中的消息。

那麼我怎樣才能得到真正的捲曲退出狀態代碼(22找不到文件)?

回答

2

--fail在http協議的情況下將返回22的錯誤代碼,並且 的返回碼可能與其他協議的不同,如ftp。請看下圖:

[email protected]:~$ curl --fail ftp://ftp.redhat.com/redhat/brms/6.2.0/en/source/MD5 
curl: (78) RETR response: 550 
[email protected]:~$ 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