Как сделать этот цикл 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 дважды.

  • cron job for pure-quotacheck с чистым списком pw
  • Почему SIGINT не работает в фоновом режиме в скрипте?
  • Лучший способ запуска одиночного цикла вместо двух для циклов
  • base10 не работает
  • Что делает оболочку интерпретировать эти перенаправления следующим образом?
  • Проверка скрипта выполняется
  • Как я могу отредактировать мой скрипт bash для учета пробелов?
  • Список файлов + каталог, рекурсивно отсортированный по времени доступа
  • Как я могу вызвать событие в сценарии оболочки при удалении USB-устройства?
  • Какой самый простой способ найти неиспользуемый локальный порт?
  • Эхо-список процесса не работает
  • Удаление следующего-последнего расширения в имени файла
  • 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 - лучшая ОС в мире.