web-dev-qa-db-ja.com

トラップが呼び出される原因となったトラップの出力信号?

スクリプトを終了するいくつかのシグナルをキャッチする次のトラップがあるとしましょう。

#!/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互換のソリューションをお勧めします。

2
rugk

なので 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
# […]
3
Lucas