我有一个应该捕获 SIGTERM 和 SIGTSTP 的脚本。这就是我在主块中的内容:
trap 'killHandling' TERM
在函数中:
killHandling () {
echo received kill signal, ignoring
return
}
... 和 SIGINT 类似。问题是用户界面之一。脚本会提示用户输入一些内容,如果在脚本等待输入时出现 SIGTERM 或 SIGINT,那就令人困惑了。这是这种情况下的输出:
Enter something: # SIGTERM received
received kill signal, ignoring
# shell waits at blank line for user input, user gets confused
# user hits "return", which then gets read as blank input from the user
# bad things happen because of the blank input
我肯定见过可以更优雅地处理此问题的脚本,如下所示:
Enter something: # SIGTERM received
received kill signal, ignoring
Enter something: # re-prompts user for user input, user is not confused
实现后者的机制是什么?不幸的是,我不能简单地更改我的陷阱代码来重新提示,因为脚本会提示用户几件事,并且提示所说的内容取决于上下文。并且必须有比编写依赖于上下文的陷阱函数更好的方法。
我将非常感谢任何指示。谢谢!