2016-11-29 97 views
0
unzip /test_data/sample.ZIP -d /data/Traget/ 
if [ "$?" = 1 ]; then 
    echo " Unzipping of files failed" 
    exit 1 
fi 

該腳本正在歸檔數據並嘗試寫入所提及的位置,但目錄/ data/Traget /無權訪問,因此腳本失敗。但其不扔狀態1. 可能有人請幫助Unix命令失敗但仍返回狀態0

謝謝

+1

你檢查了它實際返回的狀態嗎?習慣上成功時返回0,但是失敗的代碼不同。也許你的解壓縮命令返回2或3? – nos

回答

0

它是如此簡單得多了:

set -e 
set -o pipefail 

unzip /test_data/sample.ZIP -d /data/Target/ 

所有擊得離譜你寫的那個人應該從這兩個選項開始。如果任何單個命令失敗,他們所做的就是終止腳本並出現錯誤。

這與VBA的可惡的「On Error Resume Next」相反,如果有人記得的話!

但如果你真的需要到處寫冗長的錯誤處理代碼,你會做這種方式:

if ! unzip /test_data/sample.ZIP -d /data/Traget/; then 
    echo " Unzipping of files failed" 
    exit 1 
fi 
0

你應該扭轉你的邏輯。成功時解壓縮返回0,並返回任意數量的退出代碼。因此,使它:

unzip /test_data/sample.ZIP -d /data/Traget/ 
if [ "$?" -ne 0 ]; then 
    echo " Unzipping of files failed" 
    exit 1 
fi 

可以輕鬆地查看自己什麼由你想知道從退出狀態的命令後,運行 echo $?太解壓的回報。

這裏是當我運行一個類似的命令會發生什麼:

$ unzip dd.zip -d /tmp/a/b/ 
Archive: dd.zip 
error: cannot create /tmp/a/b/filename 
     Permission denied 
$ echo $? 
50 

,當它以這種方式失敗,那麼解壓縮收益50。