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

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

хотя true
делай

что-то...

если (ctrl + c нажата break)

готово
эхо "из петли"

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

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

Info: я использую (1) Scientific Linux SL release 5.4 (Boron), (2) Ubuntu 16.04

Edit: я хочу, чтобы этот точный код работал

#!/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
5
задан quanta
источник

1 ответов

#!/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
2
отвечен Nifle 2017-02-24 14:50:52
источник

Другие вопросы bash infinite-loop linux sigint