无参数 trap 打印所有陷阱的当前设置命令。但是,子 shell 不继承陷阱,因此保存和恢复陷阱的规范示例在 bash 中失败:

save_traps=$(trap)
...
eval "$save_traps"

分配右侧的陷阱在子 shell 中运行,因此 save_traps 始终为空字符串。除了写输出 trap 对于临时文件,脚本如何找到陷阱的当前命令集?

有帮助吗?

解决方案

对我有用。

创建一个示例陷阱:

$ trap
$ trap echo SIGIO
$ trap
trap -- 'echo' SIGIO

将陷阱存放到 save_traps:

$ save_traps=$(trap)

消除:

$ trap SIGIO
$ trap | wc -l
   0

恢复:

$ eval "$save_traps"
$ trap
trap -- 'echo' SIGIO

测试用:

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.

其他提示

虽然 Bash 手册页似乎说陷阱是在子 shell 中重置的,并且命令替换是在子 shell 中执行的,但运行 trap 里面 $() 无论如何都可以工作(在 Bash 3.2 和 4.2 中测试)。POSIX中也提到了 traps=$(trap) 应该管用。

谢谢 pgas#bashirc.freenode.net.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top