В Ctrl + C убейте текущую команду, но продолжайте выполнение скрипта

У меня есть сценарий bash, в котором я выполняю строку, спать на какое-то время, а затем tail -f мой файл журнала для проверки определенного шаблона, я нажимаю ctrl + c, чтобы выйти из tail -f а затем перейти к следующей строке пока скрипт bash не завершит выполнение:

Вот что я сделал до сих пор:

 #!/bin/bash # capture the hostname host_name=`hostname -f` # method that runs tail -f on log_file.log and looks for pattern and passes control to next line on 'ctrl+c' echo "===================================================" echo "On $host_name: running some command" some command here echo "On $host_name: sleeping for 5s" sleep 5 # Look for: "pattern" in log_file.log # trap 'continue' SIGINT trap 'continue' SIGINT echo "On $host_name: post update looking for pattern" tail -f /var/log/hadoop/datanode.log | egrep -i -e "receiving.*src.*dest.*" # some more sanity check echo "On $host_name: checking uptime on process, tasktracker and hbase-regionserver processes...." sudo supervisorctl status process # in the end, enable the balancer # echo balance_switch true | hbase shell 

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

 ./script.sh: line 1: continue: only meaningful in a `for', `while', or `until' loop 

  • Невозможно переписать команду «trap» для SIGTSTP, SIGTTIN и SIGTTOU
  • При завершении работы перед установкой аварийного сигнала отключите накопители?
  • Безопасное выход из цикла в bash
  • Ключ, отличный от Control для отправки SIG *?
  • Ловушка ctrl c не работает как ожидалось
  • Как прерывание клавиатуры заканчивается как сигнал процесса
  • Может ли Ctrl + C отправить сигнал SIGINT нескольким процессам?
  • FreeBSD: все вышло из сигнала 12 после того, как «make buildworld»
  • 2 Solutions collect form web for “В Ctrl + C убейте текущую команду, но продолжайте выполнение скрипта”

    Ключевое слово continue не означает, что вы думаете, что это значит. Это означает продолжение следующей итерации цикла. Это не имеет смысла за пределами цикла.

    Я думаю, вы ищете

     trap ' ' INT 

    Так как вы не хотите ничего делать при приеме сигнала (помимо убийства переднего плана), не помещайте код в ловушку. Вам нужна непустая строка, потому что пустая строка имеет особое значение: она вызывает игнорирование сигнала.

    Ошибка возникает из-за trap 'continue' SIGINT . Из help trap :

    ARG – это команда для чтения и выполнения, когда оболочка получает сигнал (ы) SIGNAL_SPEC

    Таким образом, ваш скрипт пытается выполнить команду continue при получении вызова SIGINT но continue используется только в циклах.

    Interesting Posts

    Несколько значений масштаба окна TCP в зависимости от интерфейса?

    Почему запись в существующий файл происходит быстрее, чем запись нового пустого файла?

    Не удается восстановить со спящего tmux во время сеанса SSH

    Debian недоступен через свое имя хоста в локальной сети

    Как перезапустить firefox из командной строки?

    Получите только размер смонтированной файловой системы

    Я хочу убить все процессы, которые являются результатом следующей команды

    Что означает различие с фигурными фигурными скобками?

    установить linux os на lenovo ideapad miix 310

    Ошибка сети с несколькими параллельными контейнерами докеров

    Соединение Bluetooth Dongle отказалось.

    Передайте 150 ГБ файлов со старого MacBook Pro с Ubuntu 13.04 Live DVD

    Предотвращение завершения экрана GNU после завершения сеанса завершения сеанса

    grep для сравнения файлов не работает

    Настройка X-сервера на Centos6 минимум

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