トラップを使用してすべてのエラーで関数を呼び出すエラーレポートを作成しようとしています:
Trap "_func" ERR
ERR信号が送信されたラインを取得することは可能ですか?シェルはbashです。
そうすれば、使用されたコマンドを読み取って報告し、いくつかのアクションをログに記録/実行できます。
それとも私はこれをすべて間違っているのでしょうか?
私は以下でテストしました:
#!/bin/bash
trap "ECHO $LINENO" ERR
echo hello | grep "asdf"
そして$LINENO
2を返しています。機能していません。
承認された回答:
コメントで指摘されているように、あなたの引用は間違っています。 $LINENO
を防ぐには、一重引用符が必要です トラップラインが最初に解析されるときに展開されないようにします。
これは機能します:
#! /bin/bash
err_report() {
echo "Error on line $1"
}
trap 'err_report $LINENO' ERR
echo hello | grep foo # This is line number 9
実行中:
$ ./test.sh
Error on line 9