2016-12-22 4 views
3

次のロジックが使用されているバッシュにコマンドの終了コードを確認するには:Bashスクリプトで効率的なエラーチェックを作成するには?

if [ $? -ne 0 ] 
then 
    echo "Error occurred" 
    return 1 
fi 

私の問題は、すべてのコマンドの後にこれを追加することが同じものの複数のコピーを持つスクリプトが非常に長くなることです、と非常に硬いへ維持する。

ここで最も良いことは、終了コードをチェックする必要があるすべての場所から呼び出される関数です。問題は、現在のプロセス(現在のBashセッションが強制終了される)を強制終了するため、コマンドを使用できないため、returnコマンドだけを使用できることです。しかし、リターンコマンドを使用するとき、呼び出された関数では、呼び出し元の関数は引き続き終了コードをチェックしなければならず、同じ問題に戻りました。

BashにMACROのようなものがあるのでしょうか、エラーチェックに他の方法がありますか?これに代えて

+0

'set -e'はどうですか? – Biffen

+0

これは現在のプロセスを強制終了し、それは必要な動作ではありません –

答えて

1

if ! somecommand 
then 
    echo "Error occurred" 
    return 1 
fi 

somecommand 
if [ $? -ne 0 ] 
then 
    echo "Error occurred" 
    return 1 
fi 

あなたは あなたがif文でコマンド自体を使用することができ、$?変数に条件を記述する必要はありません別の方法として、エラー時にアクションをカプセル化するためのヘルパー関数を作成し、||あなたが本当にreturn 1を必要としない、あなたが失敗した場合には、スクリプトを終了するには、気にしない場合は最後に、あなたは内部exit 1でき

error() { 
    echo "Error occurred" 
} 

somecommand || { error; return 1; } 

:後に関数を呼び出した後、return 1するコマンドの後にオペレーターヘルパー関数と呼び出し元コードをコンパクトにすることができます:

fatal() { 
    echo "Error occurred" 
    exit 1 
} 

somecommand || fatal 
+0

ありがとうございます!演算子||選択肢は良い、1つの行の代わりに4回 –

+0

あなたは右です:) –

+0

@ A.Davidありがとう、しかし、私は正しい場合、彼らはまだそれを受け入れられた答えをマークしていない理由は? – janos

関連する問題