В 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 

  • Что происходит с запрошенными рекурсивными сигналами?
  • Отображение intr для del key
  • Можно ли отслеживать, откуда пришел SIGINT, если это не от пользователя?
  • Как сигналы работают внутри страны?
  • Невозможно переписать команду «trap» для SIGTSTP, SIGTTIN и SIGTTOU
  • Что такое сигнальные ловушки?
  • убийство подпроцессов и ловушек
  • Как остановить скрипт bash в терминале?
  • 2 Solutions collect form web for “В Ctrl + C убейте текущую команду, но продолжайте выполнение скрипта”

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

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

     trap ' ' INT 

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

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

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

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

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