【发布时间】:2016-08-27 18:38:33
【问题描述】:
我有一个 bash 脚本可以完成一些工作,而且完成得相当快。 然后它应该空闲,直到用户决定终止它,然后是一些清理代码。
这就是我使用以下代码捕获 CTRL+c 事件的原因:
control_c()
{
cleanup
exit 0
}
trap control_c SIGINT
但由于我的脚本完成得很快,我永远不会故意终止它,所以它永远不会捕获 CTRL+c 并运行清理代码。
我想我可以实现一个无限的do while 循环,在脚本末尾加上sleep,但我认为有更好的解决方案。
如何在 bash 中闲置脚本,期待 CTRL+c 事件?
【问题讨论】:
-
顺便说一句,为什么不把它放在一个通用的 EXIT 陷阱中呢?
trap cleanup 0并且您不再依赖于如何退出的细节,只要它不是像 SIGKILL 这样根本无法被困住的东西。 -
我认为这在我的情况下是不可能的。该脚本启用了一堆
iptables规则,这些规则只有在用户决定不再需要之前才有效。 -
我并不是说你不等待 ctrl+c 或 enter 或其他什么,我只是说你使用 EXIT 陷阱而不是 SIGINT 陷阱——这样它仍然会触发不基于 SIGINT 的退出。