ERRでトラップを使用する:$を送信する方法は?

ERRでトラップを使用する:$を送信する方法は?

bash 4.xで以下がある場合:

err_handler() {
    echo You received error $1|mail -s "script error" MAILTO
}

trap err_handler ERR

トラップを呼び出すときに実際のstderr出力を関数に送信するにはどうすればよいですか?私はstderrをリダイレクトするためにすべての行にロジックを入れることを避けたいと思います。これが罠の要点だと思います。

ベストアンサー1

コマンドがゼロ以外の終了状態に戻ると、出力はすでに完了しているため、エラー出力を遡ってキャプチャできません。ただし、次のコマンドを実行すると、スクリプトのすべてのstderr出力を最初からファイルにリダイレクトできます。

exec 2>/some/file

スクリプトの始めに。このコマンドのない形式は、exec現在のシェルプロセスにリダイレクトを適用します。その後、エラーが発生した場合はファイルを送信できます。

この方法のもう1つの利点は、何らかの理由でメール転送が失敗した場合でも、ローカルでファイルを見続けることができることです(もちろん、原因がディスク障害の場合を除く)。

おすすめ記事