不带参数trap
打印所有陷阱的当前设置命令。但是,子 shell 不继承陷阱,因此保存和恢复陷阱的规范示例在 bash 中失败:
保存陷阱=$(陷阱) ... 评估 "$save_traps"
分配的 RHS 上的陷阱在子 shell 中运行,因此 save_traps 始终是空字符串。除了将输出写入trap
临时文件之外,脚本如何找到陷阱的当前命令集?
不带参数trap
打印所有陷阱的当前设置命令。但是,子 shell 不继承陷阱,因此保存和恢复陷阱的规范示例在 bash 中失败:
保存陷阱=$(陷阱) ... 评估 "$save_traps"
分配的 RHS 上的陷阱在子 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
at irc.freenode.net
。