在bash中捕获键盘中断

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条件?

dev*_*ull 5

我想你想exit在检测到用户中断后(当然在完成清理行为后).如果是这样,你需要在函数行exit后面说rm -rf ....除非您这样做,否则trap会捕获一个信号SIGINT,例如,在您的user_interrupt函数中执行任务,脚本将继续执行.

要回答另一个问题,只需在脚本顶部定义您提到的函数,然后定义两个trap命令,然后定义剩余的代码(install()函数等). trap将捕获所提到的信号,你不需要任何明确的处理.