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

  • Сравнение исходной и резервной папки, а затем удаление несуществующих файлов
  • Повторить на основе пользовательского ввода OS X
  • Shell Scripting: Правильный способ проверить подключение к Интернету?
  • При использовании $ hash_array
  • Shell Script считывает метаданные файла, а затем mv каждый в новый каталог
  • Определите размер резервной копии за 7 дней
  • Редактируйте файл с помощью скрипта, но сохраняйте теги osx
  • дисковое пространство отдельного пользователя
  • 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 - лучшая ОС в мире.