bashスクリプトのデバッグ手法として、擬似シグナルERRを使用して、エラー発生時にスクリプトを以下のような方法を使っていた。
(オライリーのbash本に書いてあるようでよく見かける)
trap function ERR
最近、サブルーチン内でのエラーが拾えずスクリプトが最後まで言ってしまう場合が場合があったので少し調べてみた。
擬似シグナルERRの条件をマニュアルで調べると
"コマンドや関数が非ゼロなリターンコードを返した場合の擬似シグナル"
サブルーチンの途中でエラーが起きてもその後のコマンドが正常終了すればサブルーチンはゼロを返してしまう。
そうすると「コマンド」や「関数」が非ゼロを返さないことになるので、trapできないのが原因か。。。納得。
いろいろ考えたが、結局サブルーチンを多用するようなbashスクリプトではERRはそぐわないと考え、暫定対処として、set -e
を行いエラー発生時点でスクリプトを終了させ、EXITをtrapする形で対処した。
とりあえず暫定対処としてはこれでいいが、せっかくのERRが使用できず何か釈然としない。
誰か何かいい案ないですか?