提问人:William Pursell 提问时间:3/8/2012 最后编辑:JoltaWilliam Pursell 更新时间:4/11/2017 访问量:911
在没有临时文件的情况下恢复陷阱
Restore traps without a temp file
问:
Without arguments 打印当前为所有陷阱设置的命令。但是,子 shell 不会继承陷阱,因此保存和恢复陷阱的规范示例在 bash 中失败:trap
save_traps=$(trap) ... eval "$save_traps"
赋值的 RHS 上的陷阱在子 shell 中运行,因此 save_traps 始终为空字符串。除了将输出写入临时文件之外,脚本如何找到陷阱的当前命令集?trap
答:
1赞
TaylanKammer
3/15/2012
#1
尽管 Bash 手册页似乎说陷阱在子 shell 中重置,命令替换在子 shell 中执行,但无论如何在里面运行都可以工作(在 Bash 3.2 和 4.2 中测试)。POSIX中也提到了应该起作用。trap
$()
traps=$(trap)
感谢 in at .pgas
#bash
irc.freenode.net
评论
0赞
William Pursell
3/15/2012
事实上,它在 3.2.25 中确实有效,而我看到的失败是在 3.00.15 中。这是一个非常烦人的错误。
4赞
Rudolf Adamkovič
10/5/2012
#2
对我有用。
创建示例陷阱:
$ 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.
评论
2赞
Truong Nguyen
8/18/2018
要保存特定信号,例如 INT,您可以使用“save_traps=$(trap -p INT)”
上一个:awk 中 NF 减少后
下一个:.or 的旧代码用法
评论
export
trap > trap.$$ && save_traps=$(< trap.$$) && rm trap.$$
save_traps=$(trap)