linux - 在 bash 中捕获键盘中断

标签 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
}

现在,在同一个脚本中,我有另一个名为 install() 的函数,它使用标准 ./configure 从源代码一个接一个地安装一些包, makemake install 过程。这个想法是在依次运行 3 个安装时捕获用户中断。问题是,我应该在哪里放置以下语句:

trap user_interrupt SIGINT
trap user_interrupt SIGTSTP

那么我应该把它作为 install() 函数中的第一条语句吗?还是我需要 if-else 条件?

最佳答案

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

要回答另一个问题,只需定义您在脚本顶部提到的函数,然后是两个 trap 命令,然后是剩余的代码(install() 函数等)。 trap 会捕获提到的信号,您不需要对此进行任何显式处理。

关于linux - 在 bash 中捕获键盘中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913235/

相关文章:

linux - kde 'window shortcuts' 是临时的

linux - Bash 脚本 - 根据模板转换时间

python - 为什么 bash 语言通常比 python 或 ruby​​ 慢?

bash - Unix 使用 comm 比较两个 CSV 文件

python - 让本地 numpy 覆盖全局

linux - 如何使用 bash 找出您的 IP 地址

c - 将包含字符串的结构写入二进制文件

linux - 如何在sqlite中分隔表?

string - 如果变量名存储为字符串,如何获取变量值?

centos - Ada 封装库项目 GNAT