Bash でのエラー処理

Nilesh Katuwal 2023年6月20日
Bash でのエラー処理

この記事では、bash でのエラー処理について説明します。 終了コード、errexittrap などのオプションを知ることで、堅牢なスクリプトを作成し、bash の問題をより効果的に管理できることを思い出してください。

Bash の終了コード

終了コードに基づくエラー処理は、コマンドの失敗を検出するための標準的な手法です。 これは、外部コマンドに関して特に当てはまります。

bash の curl コマンドは、既知のエラー コードに基づいて問題を処理する優れた例です。 ユーザー定義ルーチンとは対照的に、外部コマンド エラー コードは完全に文書化されています。

${?} は、特定の行の前に実行された最後のコマンドの終了ステータスを格納します。 コード0は、コマンドが正常に実行されたことを示します。 そうでなければ、何かが間違っていました。

case {?} in
0) {
true # ok
} ;;
*) {
false # something went wrong
}

Bash のエラー処理は、単純な終了コードで実行される場合があります。 怠惰な解決策が見つかるまで試すことができます。 少なくとも、エラー コードに従って問題を処理するためのいくつかの条件を実装した後、どの個人もこれを行うでしょう。

エラーで終了

エラー時の終了は、間違いなく、bash プログラマーが始めない最も役立つエラー検出および処理機能です。

trapEXITERROR

trapを使用すると、シェルがシグナルを受信した場合に実行するコマンドを指定できます。 SIGNAL SPECs はシグナルに付けられた名前です。 いくつかの頻繁な EXIT、ERROR、DEBUG、および RETURN シグナル。

trap -l コマンドを使用して、さらに多くのシグナルを一覧表示できます。 trap -p SIGSPEC を使用して、どのコマンドが特定のシグナルにリンクされているかを判断することもできます。

たとえば、ERR シグナルに対応するコマンドを特定したい場合があります。 そのような状況では、次のコマンド ラインを入力できます。

trap -p ERR

出力が空の場合、trap はまだコマンドをシグナルにリンクしていません。

_() { echo oops ; }
 trap _ ERR EXIT

これで、シグナル コマンドを出力しても空の結果が生成されなくなりました。

入力:

trap -p EXIT ERR

出力:

trap -- '_' EXIT
trap -- '_' ERR

関連記事 - Bash Error