どのシグナルをキャプチャしてスクリプトを終了する次のトラップがあるとします。
#!/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準拠のソリューションを好みます。
答え1
操作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
# […]