如何重新启用已禁用的陷阱

时间:2013-02-03 18:58:00

标签: bash

我使用

启用了陷阱DEBUG
function my_trap ()
{
    # some code in here
}
trap 'my_trap' DEBUG


然后我需要禁用它一段时间,所以我做了

trap - DEBUG


立即
如何重新启用相同的陷阱? ..没有重写:

trap 'my_trap' DEBUG

我不想重写它,因为如果我更改陷阱功能名称,我只需要在一点上更改它。

2 个答案:

答案 0 :(得分:1)

我只发现了以下方式:

traps=$( trap )
declare regex="'([^']+)' DEBUG"
[[ ${traps} =~ ${regex} ]]
trap "${BASH_REMATCH[1]}" DEBUG

还有更优雅的吗?

答案 1 :(得分:0)

你找到的方式是正确的,但有了这个,

  • 您不使用超过1个可用变量:

  • 检索包含引用'的陷阱脚本:

[[  $(trap) =~ trap\ --\ \'([^$'\n']*)\'\ DEBUG ]] && var="${BASH_REMATCH[1]}"

进行了测试:

trap -- 'echo $RANDOM;echo $'\''Hello\nWorld'\'';date' DEBUG

[[  $(trap) =~ trap\ --\ \'([^$'\n']*)\'\ DEBUG ]] &&trCmd="${BASH_REMATCH[1]}"

trap DEBUG

eval trap -- \'$trCmd\' DEBUG