1

Perl では$SIG{__DIE__}、プログラムがエラーで終了する場合にコードを実行するハンドラーを作成できます。bash は同様の機能を提供しますか?

私がやろうとしていることは次のとおりです。新しいディレクトリを作成し、いくつかのコマンドを呼び出して、新しいディレクトリにデータ ファイルを入力する bash スクリプトがあります。set -eコマンドのいずれかが失敗した場合、スクリプトがすぐに終了するように使用しています。失敗した場合は、スクリプトで作成したディレクトリを削除してもらいたいです。スクリプトが正常に完了すると、もちろん新しい出力が残るはずです。

bash は、DIE シグナル ハンドラー、またはこれを可能にする同様の機能を提供しますか?

4

1 に答える 1

5

を使用しているため、ハンドラーset -eをインストールできます。ERR

trap errfunc ERR

errfuncいずれかのコマンドがゼロ以外の終了コードで終了した場合に呼び出されます (また、 を使用しているためset -e、これによりスクリプトが終了します)。

この方法でも引数を渡すことができます。

trap 'errfunc $LINENO' ERR

トラップ コマンドはevalエラーの時点で実行されるため、このトラップは失敗したコマンドの行番号を に渡しerrfuncます。

于 2013-02-08T21:08:07.690 に答える