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á
command
cuando se presione Control-C. Simplemente coloque latrap
declaración en algún lugar de su secuencia de comandos en un punto donde desee que se haga efectiva.fuente
Ctrl-Z
para 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
rsync
comando, 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