web-dev-qa-db-ja.com

set -eが原因でbashスクリプトが終了した場合にエラーメッセージを表示する

コマンドがゼロ以外の値を返した場合にスクリプトを終了したいのですが、set -e

現在、スクリプトは問題(望ましいこと)に遭遇すると失敗しますが、見逃すのは簡単です。一部のコマンドは、失敗したものを出力せずにエラーコードを返す場合があります。

スクリプトが終了したことを警告するエラーメッセージを追加する標準的な方法は何ですか?

8

Bashは-eのようなエラーをキャプチャしますが、終了せず、他のことを行います スクリプトを終了する前にエラーメッセージを表示する方法を見つけました。

trapを使用して、エラーが発生したときに指定されたコードが実行されるようにすることができます。これは、-eオプションがスクリプトを終了する直前に発生します。例えば

set -e

err_report() {
    echo "Error on line $1"
}

trap 'err_report $LINENO' ERR

echox
echo "x"

結果になります

test.sh: line 9: echox: command not found
Error on line 9
7