¿Cómo salir de un bucle bash mediante la entrada del teclado?

¿Cómo salir de un bucle bash mediante la entrada del teclado?

tengo un bash loppcomo

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

Interrumpo el bucle largo mediante una entrada de teclado, Ctrl+Cpero Ctrl+Csimplemente finalizo el script. Estoy buscando una alternativa para continuar el ciclo actual y romper el ciclo después de finalizar la ejecución STUFFdel ciclo actual.

Respuesta1

Una forma es a trapla señal Control-C y breakfuera del loop, como en:

#!/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 obtener más detalles sobre cómo funciona esto, las líneas clave son:

trap break INT

y también

trap - INT

Usamos "break" para decirle a la trampa que queremos ejecutar break para romper el bucle cuando se genera la señal INT(interrupción, también conocida como ) (lo que sucede cuando presiona Ctrl+C)SIGINT

En lugar de "romper", podríamos poner comandos de shell arbitrarios entre comillas, y eso se ejecutará cuando se genere la señal dada (INT en nuestro caso).

Por último, ejecutamos trap nuevamente -para restaurar el controlador "INT" a la acción predeterminada.

Aquí hay algunos recursos más para lecturas adicionales y ejemplos:

información relacionada