Bash で同一シグナルに複数のトラップを設定する方法

背景

Bashスクリプトにトラップを設定することができます。トラップとは、シグナルに対して反応するコマンドの事です。Bashでは一般に下記の方法でスクリプトにトラップを設定します。

(注:同一のtrapに複数のシグナルを同時に指定することもできます。)

このトラップコマンドに本当にトラップ(罠)が仕掛けられています。例えば、この様な場面があります。一時ファイルを何回も作成し、スクリプトが終了する時に一切削除をしたい、では、下記のやり方をしてみましょう。

これがダメなんです。削除されるのは「$TMPFILE3」のみです。原因は、trapを実行する度に現在のフラップコマンドを上書きしてしまいます。簡単な解決法としては、下記のような書き方をすることはできます。

しかし、プログラムが大きくなれば、いつ、どこで設定するかを把握しにくくなります。なので更なる改良が必要です。

解決策 (multitrap)

解決策は下記のようなプログラムを使用するか、類似の方法を使用することになるかと思います。

上記のコードをあなたのスクリプトの先頭部分に置いて、以降はすべての「trap」を「multitrap」に書き換えれば解決です。

使用例:

出力結果:

 

Leave a Reply

Your email address will not be published. Required fields are marked *