Como sair de um loop bash pela entrada do teclado?

Como sair de um loop bash pela entrada do teclado?

eu tenho um bash loppcomo

#!/bin/bash
for (( c=0; c<=1000000; c++ ))
do  
SOME STUFF HERE
done

Eu interrompo o loop longo com uma entrada do teclado, Ctrl+Cmas Ctrl+Csimplesmente encerro o script. Estou procurando uma alternativa para continuar o ciclo atual e interromper o loop após terminar a execução STUFFdo ciclo atual.

Responder1

Uma maneira é entrar trapno sinal Control-C e breaksair do loop, como em:

#!/bin/bash
trap break INT
for (( c=0; c<=1000000; c++ ))
do  
SOME STUFF HERE
done
echo "I have broken out of the interminably long for loop"
trap - INT
sleep 1
echo "END."

Para mais detalhes de como isso funciona, as linhas principais são:

trap break INT

e também

trap - INT

Usamos "break" para dizer ao trap que queremos executar break para interromper o loop quando o sinal INT(interrupt, também conhecido como SIGINT) for gerado (o que acontece quando pressionamos Ctrl + C)

Em vez de "break", poderíamos colocar comandos arbitrários do shell entre aspas, e isso será executado quando o sinal fornecido (INT no nosso caso) for gerado.

Por último, executamos trap novamente -para restaurar o manipulador "INT" para a ação padrão.

Aqui estão mais alguns recursos para leitura adicional e exemplos:

informação relacionada