Ich synchronisiere ein paar Verzeichnisse. Ich habe ein Bash-Terminal geöffnet und führe Folgendes aus:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
Wenn ich jedoch das Ganze stoppen möchte, drücke ich Strg-C. Das stoppt den Rsync, aber dann geht es weiter zum nächsten. In diesem Fall merke ich, was passiert ist und drücke dann einfach wie ein Verrückter die Strg-Taste, bis die Dinge wieder funktionieren.
Gibt es eine Möglichkeit, dies zu beheben? Wenn ich eine solche Schleife habe und Strg-C drücke, möchte ich, dass ich wieder zu meiner Bash-Shell zurückkomme.
Antworten:
Dies beendet auch die Schleife, wenn ein einzelner rsync-Lauf aus irgendeinem Grund fehlschlägt.
quelle
break 2
(oder ersetzen Sie "2" durch die Anzahl der verschachtelten Schleifen, die Sie beenden möchten).Um die Antwort von Dennis zu erweitern, könnte Ihr Code folgendermaßen aussehen:
Ein funktionierendes Beispiel (das zufällig rsync beinhaltet) finden Sie unter http://gist.github.com/279849 .
quelle
Sie können eine Falle für Control-C einrichten.
wird ausgeführt,
command
wenn Control-C gedrückt wird. Platzieren Sie dietrap
Anweisung einfach an einer beliebigen Stelle in Ihrem Skript, an der sie wirksam werden soll.quelle
Wenn Sie eine Befehlsfolge in runde Klammern setzen, fungiert die Zeichenfolge als ein einzelner Prozess und empfängt das ZEICHEN und wird beendet, wenn Sie Ctrl- drücken C:
Aber! Im Fall des
rsync
Befehls sind mehrere Quellen zulässig, sodass der von Ihnen geschriebene Code besser geschrieben wäre als:quelle
Ctrl-Z
, um das Skript anzuhalten.kill %%
Credits, Erklärungen und weitere Details in dieser Antwort .
quelle
Ich neige dazu, einen anderen Befehl in meine Schleife einzufügen, der leicht unterbrochen werden kann. Es müssen zwei Strg-C gedrückt werden.
Es ist keine so gute Lösung für diesen Rsync, den Sie wahrscheinlich schnell ausführen möchten. Aber es funktioniert gut für andere Schleifen, wie diese:
In dieser Schleife wird die Adresse von example.com jedes Mal neu gesucht. Dies ist hilfreich, wenn Sie nach einer DNS-Änderung Ausschau halten.
quelle