GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash Loop - Wie stoppe ich die Schleife, wenn ich in einem Befehl Strg-C drücke?

Lösung 1:

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

Dadurch wird die Schleife auch beendet, wenn ein einzelner rsync-Lauf aus irgendeinem Grund fehlschlägt.

Lösung 2:

Um die Antwort von Dennis zu erweitern, könnte Ihr Code so aussehen:

trap "echo Exited!; exit;" SIGINT SIGTERM

Ein funktionierendes Beispiel (das zufällig rsync beinhaltet) finden Sie unter http://gist.github.com/279849.

Lösung 3:

Sie können eine Falle für Control-C setzen.

trap <command> SIGINT

führt den command aus wenn Strg-C gedrückt wird. Geben Sie einfach die trap ein Anweisung irgendwo in Ihrem Skript an einer Stelle, an der sie wirksam werden soll.

Lösung 4:

  1. Drücken Sie Ctrl-Z um das Skript zu unterbrechen;
  2. kill %%

Credits, Erklärungen und weitere Details in dieser Antwort.

Lösung 5:

Wenn Sie eine Reihe von Befehlen in Klammern setzen, fungiert die Zeichenfolge als ein einzelner Prozess, empfängt das SIGINT und wird beendet, wenn Sie Strg drücken -C :

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

Aber! Im Fall von rsync Befehl, erlaubt es mehrere Quellen, also wäre der Code, den Sie geschrieben haben, besser geschrieben als:

rsync -a * example.com:somewhere/

Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. Der Linux-rsync-Befehl:wie man ihn benutzt

  3. So erhalten Sie den Exit-Status in einer Bash-Schleife

  4. Wie speichere und schließe ich die Datei beim Bearbeiten in Bash?

  5. SSH - So fügen Sie den Befehl -t in die Datei ~/.ssh/config ein

So verwenden Sie den Bash-Let-Befehl {mit Beispielen}

So verwenden Sie den Bash-Lesebefehl

Wie stoppe ich das Loop Bash-Skript im Terminal?

Wie kann man die genaue Befehlszeile sehen, die in einer Bash-Instanz ausgeführt wird?

Wie plane ich einen Rsync-Befehl?

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl