Estoy sincronizando algunos directorios. Tengo una terminal de bash abierta y estoy ejecutando algo como esto:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
Sin embargo, si quiero detener todo, presiono Control-C. Eso detiene el rsync, pero luego continúa con el siguiente. En este caso, me doy cuenta de lo que sucedió y luego presiono Control-C como un loco hasta que las cosas funcionen nuevamente.
¿Hay alguna manera de "arreglar" esto? Lo quiero, así que si tengo un bucle como ese, y presiono Control-C, me devolverá a mi shell bash.

Respuestas:
Esto también saldrá del ciclo si una ejecución individual de rsync falla por alguna razón.
fuente
break 2(o reemplace "2" con el número de bucles anidados que desea terminar).Para ampliar la respuesta de Dennis, su código podría verse así:
Para ver un ejemplo de trabajo (que involucra rsync), consulte http://gist.github.com/279849 .
fuente
Puede establecer una trampa para Control-C.
ejecutará
commandcuando se presione Control-C. Simplemente coloque latrapdeclaración en algún lugar de su secuencia de comandos en un punto donde desee que se haga efectiva.fuente
Ctrl-Zpara suspender el guión;kill %%Créditos, explicaciones y más detalles en esta respuesta .
fuente
Cuando coloca una cadena de comandos entre paréntesis, la cadena actuará como un solo proceso, y recibirá el SIGINT y terminará cuando presione Ctrl- C:
¡Pero! En el caso del
rsynccomando, permite múltiples fuentes, por lo que el código que escribió se escribiría mejor como:fuente
Tiendo a poner otro comando en mi bucle que se puede interrumpir fácilmente. Requiere presionar dos ctrl-C's.
No es una gran solución para este rsync, que probablemente quieras ejecutar rápidamente. Pero funciona bien para otros bucles, como este:
Este bucle volverá a buscar la dirección de example.com cada vez a través del bucle, lo cual es útil si está buscando un cambio de DNS.
fuente