多个bash陷阱为同一信号

前端之家收集整理的这篇文章主要介绍了多个bash陷阱为同一信号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我在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]}

然后,如果您需要使用函数名称等,则可以从头开始重新构建trap命令。

猜你在找的Bash相关文章