我有以下bash
复合命令:
while true ; do slow-command-one ; slow-command-two ; slow-command-three ; done
会发生什么:
- 当我按下CtrlC任意一点时,整个命令都会中止。
我希望发生的事:
- 当我CtrlC在执行期间按下时
slow-command-two
,slow-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