Bash – сделать бесконечную работу, ожидая нажатия определенной клавиши – возможно?

У меня есть следующий бесконечный цикл в bash, выполняющий do_some_simple_job каждые 10 минут:

 while true do do_some_simple_job sleep 600 done 

Я бы хотел, чтобы сценарий принимал некоторые нажатия клавиш во время выполнения этой задачи, например, для отмены задания, но не для завершения скрипта, возможно ли это?

  • Сценарий Bash SFTPing на удаленный сервер и загрузка файлов, cd в соответствующий каталог на локальной машине
  • Параметр игнорируется при цитировании
  • Синтаксис оболочки: как правильно использовать \ для разрыва строк?
  • Как найти файлы к моменту их имени?
  • Экстра% в выходе скрипта awk
  • Задачи автоматизации для системных администраторов
  • Разница между sh -x и ./ для выполнения скрипта
  • Почему `zip` в цикле for работает, когда файл существует, но не тогда, когда он этого не делает?
  • One Solution collect form web for “Bash – сделать бесконечную работу, ожидая нажатия определенной клавиши – возможно?”

    Да, это возможно.

     #!/bin/sh sigint_handler () { echo "Killing the job ($job_pid)" kill $job_pid } while true; do some_simple_job & job_pid=$! trap 'sigint_handler' INT echo "Job started ($job_pid)" wait trap - INT echo "Job finished, waiting 10 minutes..." sleep 600 done 

    Этот скрипт sh (также работает в bash , ksh93 и других совместимых оболочках) содержит ваш бесконечный цикл. После запуска задания в фоновом режиме он устанавливает обработчик сигналов , небольшую подпрограмму, которая должна запускаться всякий раз, когда скрипт ловит определенный сигнал. Сигналом, который он ловит, является сигнал INT (прерывание), который вы посылаете, нажав Ctrl + C.

    Сценарий ожидает завершения задания, затем он спит в течение 10 минут (как это делает ваш скрипт). Перед тем, как он спит, он удалит обработчик сигнала, чтобы вы могли прервать скрипт с помощью Ctrl + C.

    Если во время выполнения задания поступает сигнал INT , обработчик сигнала убьет задание с помощью идентификатора процесса. Затем скрипт будет выполнен для удаления обработчика и сна.

    Если вы не выходите из сценария в течение 10 минут сна, цикл продолжается с запуском задания и установкой обработчика снова.

    Interesting Posts

    Можно ли разрешить символ «\» в записи PTR?

    Как задержать запуск службы при загрузке в Debian?

    Запустить GUI OS через гипервизор с сервера Linux?

    Содержимое кэшируется в оперативной памяти при записи на диск – Linux

    Используйте OpenVPN на TCP 443, не вмешиваясь в мой веб-сервер

    добавить в файл добавочный столбец идентификатора

    Как проверить, является ли файл файлом шрифта

    Ошибка завершения работы Fedora 21 и перезагрузки

    есть ли какая-либо польза для папки / selinux, когда я не использую selinux?

    Переменная Unix, не способная хранить вывод sql-запроса

    Общие сведения о Linux Perf sched-switch и контекстных переключателях

    Подвижная точка навигации vim, прыжки средней дальности

    Как захватить единый процесс и нарисовать его кактусы?

    Linux Mint 11 не будет подключаться к Windows 7 Wireless Ad Hoc

    Emacs: автоматически переключается в режим char при переключении в анси-терминальное окно

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