选择性忽略 Ctrl+C / SIGINT

选择性忽略 Ctrl+C / SIGINT

我有以下bash复合命令:

while true ; do slow-command-one ; slow-command-two ; slow-command-three ; done

会发生什么:

  • 当我按下CtrlC任意一点时,整个命令都会中止。

我希望发生的事:

  • 当我CtrlC在执行期间按下时slow-command-twoslow-command-two应该中止,并且应该继续执行slow-command-three
  • 当我CtrlC在任何其他时间按下时,整个命令应该被中止(就像现在一样)。

我怎样才能实现这一点?

答案1

您可以使用trap命令来实现这一点。使用SIGINT它和Ctrl+C 不会影响命令的执行。然后将 trap 重置为默认设置。

这应该有效:

#!/bin/bash

while true; do
  slow-command-one;
  trap "echo Proceeding to command three" SIGINT;
  slow-command-two;
  trap - SIGINT;
  slow-command-three;
done

相关内容