4

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

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

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

trap user_interrupt SIGINT
trap user_interrupt SIGTSTP

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

4

1 回答 1

7

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

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

于 2013-09-20T09:42:45.967 回答