我在bash中有一个捕获键盘中断的函数。该函数如下所示:
user_interrupt(){
echo -e "\n\nKeyboard Interrupt detected."
sleep 2
echo -e "\n Cleaning up..."
rm -rf /usr/local/src/mysources
}
现在,在同一个脚本中,我有另一个名为install()
的函数,它使用标准./configure
,make
,{{1}从源代码中依次安装一些软件包。过程。我们的想法是在一个接一个地运行3个安装时捕获用户中断。问题是,我在哪里发表以下声明:
make install
那么我应该将它作为trap user_interrupt SIGINT
trap user_interrupt SIGTSTP
函数中的第一个语句吗?或者我需要install()
条件吗?
答案 0 :(得分:5)
我想在检测到用户中断后你想要exit
(当然在完成清理行为之后)。如果是这样,您需要在函数中的exit
行之后说出rm -rf ...
。除非您这样做,trap
将捕获信号SIGINT
,例如,执行user_interrupt
函数中的任务,脚本将继续执行。
要回答另一个问题,只需在脚本顶部定义您提到的功能,然后定义两个trap
命令,然后再定义剩余代码(install()
功能等等)。 trap
将捕获所提到的信号,您不需要任何明确的处理。