题
无参数 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
在 #bash
在 irc.freenode.net
.
不隶属于 StackOverflow