2

У меня есть следующая составная команда bash :

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

Что просходит:

  • Когда я нажимаю Ctrl C в любой момент, вся команда отменяется.

Что я хочу, чтобы произошло:

  • Когда я нажимаю Ctrl C во время выполнения slow-command-two , slow-command-two должна быть прервана, и выполнение должно продолжаться с slow-command-three .
  • Когда я нажимаю Ctrl C в любое другое время, вся команда должна быть прервана (как сейчас).

Как мне добиться этого?

1 ответ1

5

Вы можете использовать команду 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .