スクリプトを終了するいくつかのシグナルをキャッチする次のトラップがあるとしましょう。
#!/bin/sh
trapterm() {
echo "Process (PID: $$) interrupted." >&2
exit 2
}
# add trap to catch terminating signals
trap trapterm INT TERM
# […]
さて、トラップが呼び出される原因となった信号を取得して出力するにはどうすればよいですか?結果は、この架空の$SIGNAL
のように機能するはずです。
#!/bin/sh
trapterm() {
echo "Process (PID: $$) interrupted by signal $SIGNAL." >&2
exit 2
}
# add trap to catch terminating signals
trap trapterm INT TERM
# […]
シェル固有のソリューション(bash)は問題ありませんが、POSIX互換のソリューションをお勧めします。
なので man 1p trap
は、アクション(trap
の最初の引数)は、受信したシグナルに関する詳細情報なしで単純に回避されると主張しています。ポータブルソリューションは、シグナルごとに異なるハンドラーをインストールすることです。
#!/bin/sh
trap_sig() {
echo "Process (PID: $$) interrupted by signal $1." >&2
exit 2
}
# add trap to catch terminating signals
trap 'trap_sig INT' INT
trap 'trap_sig TERM' TERM
# […]