33

重複の可能性:
bashシェルスクリプトで受信した信号名を特定する

次のようなものを使用する場合trap func_trap INT TERM EXIT

func_trap () {
    ...some commands...
}

関数ブロックに、どのトラップがそれを呼び出したかを検出する方法はありますか?

何かのようなもの:

func_trap () {
    if signal = INT; then
        # do this
    else
        # do that
    fi
}

または、トラップタイプごとに、何か異なることを行う個別の関数を作成する必要がありますか?最新の受信信号を保持するbash変数はありますか?

前もって感謝します!

4

2 に答える 2

96

シグナルを関数に自動的に渡す独自のトラップ関数を実装できます。

trap_with_arg() {
    func="$1" ; shift
    for sig ; do
        trap "$func $sig" "$sig"
    done
}

$ trap_with_arg func_trap INT TERM EXIT

func_trapの最初の引数は、シグナルの名前になります。

于 2010-02-02T09:46:57.133 に答える
12

トラップされたシグナルを保持する引数または変数のドキュメントのヒントはないため、異なる動作をしたいトラップごとに関数/トラップステートメントを作成する必要があります。

于 2010-02-01T09:44:53.700 に答える