trap ビルトイン、あんまし存在感ないし、いつも忘れられてるし不憫だとおもう。
trap、その名前の通り、スクリプト内で発生するシグナルをトラップして、指定した処理実行することできる。たとえば Ctrl-C 押したとき反応するみたいなの、こんなスクリプトで実現できる。
$ cat a.sh #!/bin/bash trap 'echo だるみ' SIGINT sleep 300 $ ./a.sh ^Cだるみ
trap の最後の引数がシグナルなんだけど、trap は疑似シグナルとして ERR とか EXIT とか指定することできる。
- EXIT: シェルスクリプト実行が終了したタイミングで実行される
- ERR: どっかのコマンド実行がエラーになったときに実行される
EXIT を利用すると、シェルスクリプト実行の最後にだるいって出力できて、確実にだるさをアピールできるようになる。
$ cat b.sh #!/bin/bash trap 'echo だるい' EXIT ls -a $ ./b.sh ./ ../ だるい
ERR 指定すると、異常終了時にだるいって出力できて、マズいことが起こった場合に積極的にだるさをアピールできる。
$ cat c.sh #!/bin/bash trap 'echo だるい' ERR ls not_exist_file ls not_exist_file ./c.sh ls: not_exist_file: No such file or directory だるい ls: not_exist_file: No such file or directory だるい
というわけで、trap 非常に便利です。マジメなところでいうと、シェルスクリプトのロックファイル削除とか、そういうのに便利です。