陷阱中的输出信号导致陷阱被调用?

陷阱中的输出信号导致陷阱被调用?

假设我有以下陷阱,它捕获一些信号,从而终止脚本:

#!/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
# […]

特定于 Shell 的解决方案(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
# […]

相关内容