Ctrl + C, чтобы разорвать бесконечный цикл, а затем сделать что-то вне цикла в bash-скрипте без выхода?

967
quanta

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

в то время как правда

что-то...

если (Ctrl + C нажата перерыв)

сделано эхо "Из цикла"

Я нахожусь вне цикла, потому что были нажаты ctrl + c, и поэтому я могу делать другие вещи здесь, не выходя из сценария ....

И этот вопрос не является дубликатом, потому что я искал несколько часов, и ни один ответ не дает мне то, что я хочу. Это «из цикла» никогда не печатается, я пробовал так много примеров из разных ответов!

Информация: Я использую (1) Scientific Linux SL выпуск 5.4 (Boron), (2) Ubuntu 16.04

Изменить: я хочу, чтобы этот точный код работал

#!/bin/bash  loopN=0  while true do  echo "Loop Number = $i" i=$(($i+1))  #I want to break this loop when Ctrl+C is pressed  done  #Ctrl+C has been pressed so I am outside the loop going to do something..  echo "Exited the loop, there were $i number of loopsexecuted !" #here I will execute some commands.. let's say date date  #and then I will exit the script 
0
Вы хотите ** trap ** '' Ctrl-C '' Вот несколько примеров http://stackoverflow.com/questions/12771909/bash-using-trap-ctrlc Если вам нужна более конкретная помощь, покажите нам, что вы пытались ( актуальный код) Nifle 7 лет назад 0
@Nifle Я включил пример, как я могу заставить этот конкретный пример работать? quanta 7 лет назад 0

1 ответ на вопрос

2
Nifle
#!/bin/bash  #function called by trap do_this_on_ctrl_c(){ echo "Exited the loop, there were $i number of loops executed !" date exit 0 }  trap 'do_this_on_ctrl_c' SIGINT  loopN=0  while true do echo "Loop Number = $i" i=$(($i+1)) done 
Это именно то, что я хотел, большое спасибо. Я заметил, что это работает, когда я выполняю его, используя `. / Script.sh`, но не работает, если я` source script.sh`. Я действительно новичок в этом бизнесе сценариев, но я бы очень хотел научиться. quanta 7 лет назад 0
опять странная проблема! Он работает в Scientific Linux (версия SL 5.4 boron), но в Ubuntu 16.04 `Ctrl + C` выводит меня из сценария, даже не вызывая функцию` do_this_on_ctrl_c () `. Что я должен сделать, чтобы он работал на моем Ubuntu? quanta 7 лет назад 0

Похожие вопросы