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

  • Повторение аргумента командной строки
  • Поиск количества времени в определенном номере в файле, где также указан диапазон
  • Как создать сценарий оболочки для установки докеров
  • Пользовательский скрипт shutdown в rc6.d, похоже, не работает.
  • $ HOME / bin dir не находится в $ PATH
  • crontab не выполняет мой скрипт?
  • bash добавляет апострофы к расширенной переменной
  • Переменные за пределами цикла while
  • 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 - лучшая ОС в мире.