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

Управление несколькими серверами Linux одновременно
Как изменить / добавить трекер.торрент-файл с помощью командной строки?
Выполнить git pre-commit Хук только если файлы в определенном каталоге изменены
как использовать xmllint для получения значения из xml
Странная ошибка bash: "ошибка импорта определения функции для "модуля BASH FUNC""
сценарий bash: передача аргументов в mkfs
Как сократить отображение символов no of для текущего каталога в приглашении
Mac OSX Mavericks-ZSH не может "Источник ~/.zshrc' слишком много открытых файлов
Имена файлов Munpack и utf-8 в прикреплениях
Как установить NIC в беспорядочном режиме на Mac book air?
Как создать действительный случайный MAC-адрес с помощью bash shell
Ошибки синтаксического анализа из-за специальных символов в записях DNS txt
как запустить несколько скриптов bash в одной строке без &&
Windows 10 Bash не работает
Как проверить подключение к локальной сети с помощью терминала mac os?

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