当我在bash中使用“trap”命令时,给定信号的上一个陷阱被替换。
有没有办法使同一个信号的多个陷阱火?
编辑:
看来我误解了这个问题。答案很简单:
handler1 () { do_something; } handler2 () { do_something_else; } handler3 () { handler1; handler2; } trap handler3 SIGNAL1 SIGNAL2 ...
原版的:
只需在命令结尾列出多个信号:
trap function-name SIGNAL1 SIGNAL2 SIGNAL3 ...
您可以使用trap -p找到与特定信号相关的函数:
trap -p SIGINT
注意,它单独列出每个信号,即使它们由相同的功能处理。
您可以通过执行以下操作添加一个已知的附加信号:
eval "$(trap -p SIGUSR1) SIGUSR2"
即使存在由相同功能处理的其它附加信号,这也工作。换句话说,让我们假设一个函数已经处理了三个信号 – 你可以通过引用一个现有的函数再添加两个函数(在结束引号内只显示一个)。
如果你使用Bash> = 3.2,你可以这样做来提取给定信号的函数。注意,它不完全健壮,因为可能会出现其他单引号。
[[ $(trap -p SIGUSR1) =~ trap\ --\ \'([^\047])\'.* ]] function_name=${BASH_REMATCH[1]}