перехватывающее прерывание клавиатуры

#bash #scripting

#bash #создание сценариев

Вопрос:

У меня есть скрипт bash, который выполняет программу в цикле и считывает выходные данные из программы. Я бы хотел, чтобы, когда я нажимаю control-c, это завершало работу программы, а также скрипта.

Я пробовал это, но, похоже, программа не завершается.

 control_c() {
   exit
}

while true ; do 

    trap control_c SIGINT

    my_command | while read line ; do
       echo $line 
       ...
    done
done
  

Может кто-нибудь показать мне правильный способ выполнить то, что я описал? Спасибо!

Ответ №1:

Вы можете сделать что-то вроде этого:

 control_c() {
    kill $PID
    exit
}

trap control_c SIGINT

while true ; do 
   my_command | while read line ; do
   PID=$!
   echo $line 
   ...
done
  

Ответ №2:

Попробуйте завершить работу программы в вашей control_c() функции, например,

 pkill my_command