33

可能重复:
在 bash shell 脚本中识别接收到的信号名称

当使用类似的东西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 回答