bash の trap を複数指定する方法

bashスクリプトでシグナルハンドラを定義出来るtrapは大変便利だが、trap複数回呼び出すと最後に書いたtrapの内容で上書きされてしまう。

↓例 melpon.org

別段シグナルハンドラを複数定義したいことも普通は無いが、0 番(終了時に必ず呼ばれる)には結構指定したいものが増えがちではないだろうか。

そこで、自前で複数保持出来るtrapを今即興で書きました

# zlib/libpng License
TRAP_COMMAND_STR=()

function trap() {
  TRAP_COMMAND_STR[$2]="${TRAP_COMMAND_STR[$2]} $1 ;"
  builtin trap "${TRAP_COMMAND_STR[$2]}" $2
}

どんどん;で区切って追加することで実現している。 なお、これだとシグナルハンドラのリセットが出来ないのでまぁそういう時はbuildin trapか自前のtrapを弄るか。

↓動作例

melpon.org