GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Loop:¿cómo detener el ciclo cuando presiono Control-C dentro de un comando?

Solución 1:

for DIR in * ; do rsync -a $DIR example.com:somewhere/ || break; done

Esto también saldrá del bucle si una ejecución de rsync individual falla por algún motivo.

Solución 2:

Para ampliar la respuesta de Dennis, su código podría verse así:

trap "echo Exited!; exit;" SIGINT SIGTERM

Para ver un ejemplo de trabajo (que involucra rsync), consulte http://gist.github.com/279849.

Solución 3:

Puedes tenderle una trampa a Control-C.

trap <command> SIGINT

ejecutará el command cuando se presiona Control-C. Solo pon el trap declaración en algún lugar de su secuencia de comandos en un punto en el que desea que sea efectiva.

Solución 4:

  1. Presione Ctrl-Z para suspender el guión;
  2. kill %%

Créditos, explicaciones y más detalles en esta respuesta.

Solución 5:

Cuando coloca una cadena de comandos entre paréntesis, la cadena actuará como un solo proceso, recibirá el SIGINT y terminará cuando presione Ctrl -C :

(for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done)

¡Pero! En el caso del rsync comando, permite múltiples fuentes, por lo que el código que escribió estaría mejor escrito como:

rsync -a * example.com:somewhere/

Linux
  1. ¿Cómo puedo recordar el argumento del comando bash anterior?

  2. Cómo agregar un ícono al indicador de bash

  3. ¿Cómo puedo recorrer la salida de un comando de shell?

  4. ¿Cómo configurar el color del símbolo del sistema en Bash?

  5. ¿Cómo cambiar rápidamente la primera palabra en un comando Bash?

Cómo usar el comando Bash let {con ejemplos}

Cómo usar el comando de lectura Bash

¿Cómo detener el script Loop Bash en la terminal?

¿Cómo ver la línea de comando exacta que se ejecuta dentro de alguna instancia de Bash?

¿Cómo usar el comando Rsync en Linux?

Cómo encontrar archivos con docenas de criterios con el comando Bash Find