シェルスクリプトの終了時に処理を実行させたい

ロックファイルや一時ファイルの削除など、シェルスクリプトの終了時に 実行したい処理というのがあります。 異常終了時に削除しておかなければならない場合など 毎回記述するのは大変です。

そんなときに使える trap というコマンドがあります。

trap コマンドは次のように処理とシグナルを指定します。

trap "echo hogehoge" EXIT

とりあえずコマンドラインで試してみます。

INT は [Ctrl]+[c] などによる割り込みのシグナルです。

$ trap "echo hogehoge" INT

[Ctrl]+[c] を押すと "echo hogehoge" を実行します。

$ trap "echo hogehoge" INT

$ ^Chogehoge

$ ^Chogehoge

解除するにはシグナルだけを指定します。

$ trap INT

$ ^C

[Ctrl]+[c] を押しても何もおこりません。

シェルスクリプトの中に 次のように書いておけば 終了時にファイルを削除してくれます。

trap "rm text1.txt" EXIT

EXIT はプロセス終了時のシグナルなので シェルスクリプトの終了をトラップしてくれます。

処理の進行状態によって削除するファイルが増えるときは 次のように再定義する方法で対応することもできます。

DELFILE="${DELFILE} test1.txt"
trap "rm ${DELFILE}" EXIT

(...処理....)

DELFILE="${DELFILE} test2.txt"
trap "rm ${DELFILE}" EXIT

現在の設定内容は "-p" オプション、 シグナルの一覧は "-l" オプションで 表示させることができます。

Google サイト内検索

Amazonアソシエイト