unzip /test_data/sample.ZIP -d /data/Traget/
if [ "$?" = 1 ]; then
echo " Unzipping of files failed"
exit 1
fi
該腳本正在歸檔數據並嘗試寫入所提及的位置,但目錄/ data/Traget /無權訪問,因此腳本失敗。但其不扔狀態1. 可能有人請幫助Unix命令失敗但仍返回狀態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
謝謝
它是如此簡單得多了:
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,並返回任意數量的退出代碼。因此,使它:
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。
你檢查了它實際返回的狀態嗎?習慣上成功時返回0,但是失敗的代碼不同。也許你的解壓縮命令返回2或3? – nos