GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Loop - Come interrompere il ciclo quando premo Control-C all'interno di un comando?

Soluzione 1:

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

Questo uscirà anche dal ciclo se una singola esecuzione di rsync fallisce per qualche motivo.

Soluzione 2:

Per espandere la risposta di Dennis, il tuo codice potrebbe essere simile a:

trap "echo Exited!; exit;" SIGINT SIGTERM

Per un esempio funzionante (che coinvolge rsync), dai un'occhiata a http://gist.github.com/279849.

Soluzione 3:

Puoi impostare una trappola per Control-C.

trap <command> SIGINT

eseguirà command quando viene premuto Control-C. Basta inserire il trap istruzione da qualche parte nel tuo script in un punto in cui vuoi che diventi effettiva.

Soluzione 4:

  1. Premi Ctrl-Z per sospendere lo script;
  2. kill %%

Riconoscimenti, spiegazioni e maggiori dettagli in questa risposta.

Soluzione 5:

Quando metti una stringa di comandi tra parentesi, la stringa agirà come un singolo processo, riceverà il SIGINT e terminerà quando premi Ctrl -C :

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

Ma! Nel caso del rsync comando, consente più fonti, quindi il codice che hai scritto sarebbe meglio scritto come:

rsync -a * example.com:somewhere/

Linux
  1. Come fermare il comando Trova dopo la prima partita?

  2. Come usare il comando Rsync in Linux?

  3. Come posso richiamare l'argomento del precedente comando bash?

  4. Come aggiungere un'icona al prompt di bash

  5. Come posso eseguire il loop sull'output di un comando di shell?

Come utilizzare il comando Bash let {con esempi}

Come utilizzare il comando di lettura Bash

Come pianificare un comando Rsync?

Come trovare file con dozzine di criteri con il comando Trova Bash

Come ottenere lo stato di uscita un ciclo in bash

Come impostare il colore del prompt dei comandi in Bash?