有选择地忽略 Ctrl+C / SIGINT

dav*_*420 3 bash signal

我有以下bash复合命令:

while true ; do slow-command-one ; slow-command-two ; slow-command-three ; done
Run Code Online (Sandbox Code Playgroud)

发生什么了:

  • 当我CtrlC在任何时候按下时,整个命令都会中止。

我想要发生的事情:

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

我怎样才能做到这一点?

Jan*_*nen 6

您可以trap为此使用命令。抓住SIGINT它,Ctrl+C 不会损害您的命令执行。然后将陷阱重置为默认设置。

这应该有效:

#!/bin/bash

while true; do
  slow-command-one;
  trap "echo Proceeding to command three" SIGINT;
  slow-command-two;
  trap - SIGINT;
  slow-command-three;
done
Run Code Online (Sandbox Code Playgroud)