Estou sincronizando alguns diretórios. Eu tenho um terminal bash aberto e estou executando algo como isto:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
No entanto, se eu quiser parar as coisas inteiras, pressiono Control-C. Isso interrompe o rsync, mas continua para o próximo. Nesse caso, percebo o que aconteceu e, em seguida, pressione Control-C como um louco até que as coisas funcionem novamente.
Existe alguma maneira de 'consertar' isso. Quero que, se eu tiver um loop como esse e pressione Control-C, ele retorne ao meu shell bash.
Respostas:
Isso também sairá do loop se uma execução rsync individual falhar por algum motivo.
fonte
break 2
(ou substitua "2" pelo número de loops aninhados que deseja finalizar).Para expandir a resposta de Dennis, seu código pode se parecer com:
Para um exemplo de trabalho (que envolve o rsync), consulte http://gist.github.com/279849 .
fonte
Você pode definir uma interceptação para Control-C.
executará
command
quando Control-C for pressionado. Basta colocar atrap
declaração em algum lugar do seu script, no ponto em que você deseja que ela se torne eficaz.fonte
Quando você coloca uma série de comandos dentro de parênteses, a corda vai agir como um processo único, e receberá o SIGINT e terminar quando você bate Ctrl- C:
Mas! No caso do
rsync
comando, ele permite várias fontes, portanto o código que você escreveu seria melhor escrito como:fonte
Ctrl-Z
para suspender o script;kill %%
Créditos, explicações e mais detalhes nesta resposta .
fonte
Costumo colocar outro comando no meu loop que pode ser facilmente interrompido. Requer que dois ctrl-Cs sejam pressionados.
Não é uma solução ótima para este rsync, que você provavelmente deseja executar rapidamente. Mas funciona bem para outros loops, como este:
Esse loop pesquisará novamente o endereço de example.com todas as vezes, o que é útil se você estiver procurando por uma alteração no DNS.
fonte