В 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 

2 Solutions collect form web for “В Ctrl + C убейте текущую команду, но продолжайте выполнение скрипта”

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

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

 trap ' ' INT 

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

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

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

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

  • Ловушка ctrl c не работает как ожидалось
  • Ctrl + c и Ctrl + z для прерывания / приостановки заданий
  • Что происходит с запрошенными рекурсивными сигналами?
  • Дайте группе право отправлять сигналы убийства
  • Как генерировать прерывание сигнала в файловом дескрипторе в Linux?
  • Как сигналы работают внутри страны?
  • SIGINT не очищается в "$ {FUNCNAME }"
  • Невозможно переписать команду «trap» для SIGTSTP, SIGTTIN и SIGTTOU
  • Может ли Ctrl + C отправить сигнал SIGINT нескольким процессам?
  • Почему моя ловушка не срабатывает?
  • Можно ли отслеживать, откуда пришел SIGINT, если это не от пользователя?
  • При завершении работы перед установкой аварийного сигнала отключите накопители?
  • Linux и Unix - лучшая ОС в мире.