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