是否有可能在bash中检测*哪个*陷阱信号?

时间:2010-02-01 09:23:35

标签: bash bash-trap

  

可能重复:
  Identifying received signal name in bash shell script

使用trap func_trap INT TERM EXIT之类的内容时:

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

在功能块中是否有办法检测 哪个 陷阱已经调用它?

类似的东西:

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

或者我是否需要为每种陷阱类型编写一个单独的函数来执行不同的操作? 是否存在保存最新接收信号的bash变量?

提前致谢!

2 个答案:

答案 0 :(得分:72)

您可以实现自己的陷阱功能,自动将信号传递给函数:

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

$ trap_with_arg func_trap INT TERM EXIT

func_trap的第一个参数将是信号的名称。

答案 1 :(得分:6)

没有文档提示任何包含被捕获信号的参数或变量,因此您必须为每个想要表现不同的陷阱编写一个函数/陷阱语句。