Как сделать этот цикл Ctrl + C-прерывистым?

# wait for host to become online while true; do ping host -c 1 -w 3 > /dev/null && break; sleep 1 done 

Когда я нажимаю Ctrl + C , пинг получает его и выходит с кодом выхода 1 (так же, как если бы узел находился вниз). Как это сделать правильно?

Обходной путь: sleep 1 || break sleep 1 || break и нажатие ^ C дважды.

  • Как завершить скрипт, представленный «at», начать новые процессы?
  • Макросы командной строки в комментариях с использованием SLURM
  • Продолжайте запускать скрипт через ssh
  • Восстановление tty с помощью stty
  • linux + как игнорировать (фильтровать) файл с пространством
  • Сценарий оболочки не отображает последнюю строку stdout на экране без ввода пользователем
  • Bash получает вход во время присутствия флага?
  • Количество переадресаций HTML из cURL
  • 2 Solutions collect form web for “Как сделать этот цикл Ctrl + C-прерывистым?”

     trap "exit 1" INT while true; do ping host -c 1 -w 3 > /dev/null && break; sleep 1 done trap - INT # restore handler 

    Просто не пишите свой цикл так странно.

     until ping host -c 1 -w 3 do sleep 1 done >/dev/null 

    Для выполнения вышеизложенного потребуется не более двух нажатий клавиш ^C чтобы выйти из цикла – и это из-за sleep . Но если вы сложите его еще раз:

     sh -c ' until ping host -c 1 -w 3 do sleep 1 done' >/dev/null 

    … вам не нужны даже эти два.

    Linux и Unix - лучшая ОС в мире.