2011-12-30 7 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

関連する問題