シェルを終了せずに.bashrcを停止する

シェルを終了せずに.bashrcを停止する

私の.bashrcファイルはモジュラーなので、確認するためにいくつかのエラーがあります。 Bashスクリプトには通常、エラーを検出して終了しようとしたときに呼び出す_errexit(または同様の)関数があります。

私のbashrcファイルの場合は終了したくありませんが(シェルが閉じます)、エラーメッセージを表示してすぐに処理を停止したいと思います。

これを行う方法についてのアイデアはありますか?

答え1

returnBASHでは組み込み機能を使用できます。

返品[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

関連情報