bashでシグナルハンドラを行い際に便利なコマンドtrapだがSIG*以外にも擬似シグナルをハンドリングすることが可能らしい。
If a sigspec is ERR, the command arg is executed whenever a simple command has a non-zero exit status, subject to the following conditions. The ERR trap is not executed if the failed command is part of the command list immediately following a while or until keyword, part of the test in an if statement, part of a command executed in a && or ?? list, or if the command's return value is being inverted via !. These are the same conditions obeyed by the errexit option.
終了ステータスが0以外やsoruceコマンドの戻り値なんかも対象になる。
疑似シグナル | タイミング |
---|---|
EXIT | シェルがスクリプトを終了した |
ERR | コマンド、シェル関数から0ではない終了ステータスが返された |
DEBUG | シェルが文を実行した |
RETURN | source または . で実行されたシェル関数/スクリプトが終了した |
DEBUGは以下のようなスクリプトがあるとして1行実行されるたびにtrapした内容を出力してくれる仕組み。(シェルをステップ実行したいケースなんかで有効)
#!/bin/bash # シグナルハンドラを設定 trap 'read -p "next(LINE:$LINENO)>> $BASH_COMMAND"' DEBUG DEGUB_VAR=10 expr 1 + 1