4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bashのtrap ERRによるデバッグの落とし穴?

Last updated at Posted at 2015-05-08

bashスクリプトのデバッグ手法として、擬似シグナルERRを使用して、エラー発生時にスクリプトを以下のような方法を使っていた。
(オライリーのbash本に書いてあるようでよく見かける)

trap function ERR

最近、サブルーチン内でのエラーが拾えずスクリプトが最後まで言ってしまう場合が場合があったので少し調べてみた。

擬似シグナルERRの条件をマニュアルで調べると

"コマンドや関数が非ゼロなリターンコードを返した場合の擬似シグナル"

サブルーチンの途中でエラーが起きてもその後のコマンドが正常終了すればサブルーチンはゼロを返してしまう。
そうすると「コマンド」や「関数」が非ゼロを返さないことになるので、trapできないのが原因か。。。納得。

いろいろ考えたが、結局サブルーチンを多用するようなbashスクリプトではERRはそぐわないと考え、暫定対処として、set -eを行いエラー発生時点でスクリプトを終了させ、EXITをtrapする形で対処した。

とりあえず暫定対処としてはこれでいいが、せっかくのERRが使用できず何か釈然としない。
誰か何かいい案ないですか?

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?