私の.bashrcファイルはモジュラーなので、確認するためにいくつかのエラーがあります。 Bashスクリプトには通常、エラーを検出して終了しようとしたときに呼び出す_errexit(または同様の)関数があります。
私のbashrcファイルの場合は終了したくありませんが(シェルが閉じます)、エラーメッセージを表示してすぐに処理を停止したいと思います。
これを行う方法についてのアイデアはありますか?
答え1
return
BASHでは組み込み機能を使用できます。
返品[n]
関数がnで指定された戻り値で終了するようにします。 nが省略された場合、返される状態は、関数本文で最後に実行されたコマンドの状態です。 関数の外部で使用されますが、.(ソース)コマンド内で使用されると、シェルはスクリプトの実行を停止し、nまたはスクリプト内で実行された最後のコマンドの終了ステータスをスクリプトの終了ステータスとして返します。 スクリプトが実行されていない関数の外部で使用される場合、戻り状態は false です。 RETURNトラップに関連するすべてのコマンドは、関数またはスクリプトの後に実行が再開される前に実行されます。
もちろん、他のシェルでは異なる動作をすることもできます。
基本スクリプトをループに書き換えることができる場合は、break
ループコマンドの結果に基づいてステートメントを使用できます。
答え2
処理結果を確認し、障害がない場合にのみ続行します。
module_1
if [ $? -ne 0 ]; then
display_error_function
else
module_2
if [ $? -ne 0 ]; then
display_error_function
else
echo OK
fi
fi
モジュールが多い場合は、追加のシェル変数の使用を検討してください。
編集:追加変数を使用すると、深いネストを防ぐことができます(ifブロックを繰り返すだけです)。
ERRORSFOUND=0
...
if [[ ${ERRORSFOUND} -eq 0 ]]; then
module_x
if [[ $? -ne 0 ]]; then
ERRORSFOUND=1
fi
fi