2011-12-30 32 views
1

今天,當我檢查日誌腳本, 我發現了一個命令(的unrar)與(簡稱「計劃中止」)失敗,但沒有錯誤報告,「計劃中止」,但沒有返回錯誤代碼

這是我的腳本摘錄:

unrar ...|tail -10 >> unrar.log #I found "Program Aborted" here 

if [[ "${?}" -ne "0" ]] 
then 
    echo "[ERROR] unrar application failed with $? errorcode" 
else 
    echo "[INFO] unrar application succeeded" 

這是由於我的腳本或系統本身有問題嗎?

回答

4

$?變量包含最後一個運行命令的退出狀態。在你的情況下,這是「tail」命令的退出狀態,它並沒有失敗。在bash中,您正在查找的退出狀態位於PIPESTATUS陣列中。您可以迭代數組以查看最後一個管道中的任何命令是否存在非零存在狀態。

failed=false 
for status in "${PIPESTATUS[@]}"; do 
    if ((status != 0)); then 
     failed=true 
     break 
    fi 
done 

if $failed; then 
    echo "[ERROR] unrar application failed with $status errorcode" 
else 
    echo "[INFO] unrar application succeeded" 
fi 
+0

完美答案,它可以幫助我更多地瞭解管道工作原理,謝謝:) – erical 2011-12-31 00:37:17

相關問題