假设我有以下陷阱,它捕获一些信号,从而终止脚本:
#!/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
# […]