Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題24

問題24 exit時にファイルを消す

今操作している端末を閉じたときに自身のホーム下の tmp ディレクトリのファイルを消す仕掛けを作る問題だった。ディレクトリは消さなくてよい。先に正解を書いておく。

trap 'rm ~/tmp/*' EXIT

シェルスクリプトのシバンの下に書いておけばいい。exit のマニュアルを見ると

exit [n]
ステータス  n  でシェルを終了させます。 n を省略すると、 終了ステータスは最後に実行したコマンドの終了ステータスとなります。 シェルが終了する前には、 EXIT に対するトラップが実行されます。

とのことなので、シグナルを書くところにEXITと書いておけばよさそうだと予想がつく。実際にはシグナルとは異なるらしい。実際に kill -l でシグナルの一覧を見てみたが EXIT は載っていなかった。

~/tmp/* という表記の * の使い方だが、

Pathname Expansion
       After  word splitting, unless the -f option has been set, bash scans each word for the characters *, ?, and [. If one of these characters appears, then the word is regarded as a pattern, and replaced  with  an  alphabetically  sorted  list  of filenames matching the pattern (see Pattern Matching below).

にあるようにワイルドカードとしての * 単体だとファイル名に展開されるだけでディレクトリ名には展開されない仕様になっている。