【问题标题】:Capture keyboard interrupt in bash在bash中捕获键盘中断
【发布时间】:2013-09-25 15:11:46
【问题描述】:

我在 bash 中有一个函数可以捕获键盘中断。函数如下所示:

user_interrupt(){
        echo -e "\n\nKeyboard Interrupt detected."
        sleep 2
        echo -e "\n Cleaning up..."
        rm -rf /usr/local/src/mysources
}

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

trap user_interrupt SIGINT
trap user_interrupt SIGTSTP

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

【问题讨论】:

    标签: linux bash centos interrupt sigint


    【解决方案1】:

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

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

    【讨论】:

    • 你的意思是在install()函数的开头吗?
    • 不,在函数之外;在它之前。我假设您想要捕获脚本中所有函数的中断。
    猜你喜欢
    • 2011-05-11
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2015-11-30
    • 1970-01-01
    • 2022-10-14
    • 2012-02-01
    相关资源
    最近更新 更多