GNU/Linux >> Znalost Linux >  >> Linux

Bash Loop - Jak zastavit smyčku, když stisknu Control-C uvnitř příkazu?

Řešení 1:

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

Toto také ukončí smyčku, pokud z nějakého důvodu selže jednotlivé běh rsync.

Řešení 2:

Pro rozšíření Dennisovy odpovědi může váš kód vypadat takto:

trap "echo Exited!; exit;" SIGINT SIGTERM

Pro funkční příklad (který náhodou zahrnuje rsync) se podívejte na http://gist.github.com/279849.

Řešení 3:

Na Control-C můžete nastražit past.

trap <command> SIGINT

spustí command když stisknete Control-C. Stačí zadat trap někde ve skriptu v bodě, kde chcete, aby se stal účinným.

Řešení 4:

  1. Stiskněte Ctrl-Z pozastavit skript;
  2. kill %%

Poděkování, vysvětlení a další podrobnosti v této odpovědi.

Řešení 5:

Když vložíte řetězec příkazů do závorek, bude řetězec fungovat jako jeden proces a obdrží SIGINT a skončí, když stisknete Ctrl -C :

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

Ale! V případě rsync příkaz, umožňuje více zdrojů, takže kód, který jste napsali, by byl lépe napsaný jako:

rsync -a * example.com:somewhere/

Linux
  1. Jak získat stav ukončení smyčky v bash

  2. Jak mohu zacyklit výstup příkazu shellu?

  3. Jak nastavit barvu příkazového řádku v Bash?

  1. Jak rychle změnit první slovo v příkazu Bash?

  2. Jak mohu zkontrolovat doslovné znaky řetězce příkazu bash?

  3. SSH - Jak zahrnout příkaz -t do souboru ~/.ssh/config

  1. Jak napsat smyčku v Bash

  2. Jak zastavit příkaz Najít po prvním zápase?

  3. Jak používat příkaz Rsync v linuxu?