Ich habe Probleme, die richtige Kombination aus Semikolons und / oder Klammern zu finden. Ich würde das gerne tun, aber als Einzeiler von der Kommandozeile:
while [ 1 ]
do
foo
sleep 2
done
bash
loops
while-loop
Brian Deacon
quelle
quelle
Antworten:
Übrigens, wenn Sie es an der Eingabeaufforderung als mehrzeilig eingeben (wie Sie zeigen) und dann den Verlauf mit dem Pfeil nach oben aufrufen, erhalten Sie ihn in einer einzelnen Zeile, korrekt interpunktiert.
quelle
cmdhist
Option aktivieren, wenn Sie Bash verwenden?while true; do sh /Users/myuser/bin/vpn ; done
Es ist auch möglich, den Befehl sleep im Zustand while zu verwenden. Einzeiler imho sauberer aussehen lassen.
quelle
while echo thinking ; do sleep 2 ; done
Natürlich, wenn der Befehl [while] fehlschlägt, wird die Schleife beendet, so dass Sie müssen,while echo thinking || true ; do sleep 2 ; done
aber dann sind Sie zurück zuwhile true ; ...
Doppelpunkt ist immer "wahr":
quelle
: [arguments]
Keine Auswirkung; Der Befehl erweitert lediglich die Argumente und führt die angegebenen Umleitungen aus. Ein Null-Exit-Code wird zurückgegeben.Sie können Semikolons verwenden, um Anweisungen zu trennen:
quelle
Sie können auch den folgenden
until
Befehl verwenden:Beachten Sie, dass im Gegensatz zu
while
,until
die Befehle innerhalb der Schleife ausführen würden, solange die Testbedingung einen Exit-Status hat, der nicht Null ist.Verwenden einer
while
Schleife:Verwenden einer
for
Schleife:Ein anderer Weg mit
until
:quelle
until ((0)); do foo; sleep 2; done
scheint nicht zu funktionieren. Es ist unendlich.Eine sehr einfache Endlosschleife .. :)
Für Ihre Frage wäre es:
quelle
Ich verwende die Semikolons nur für die WHILE-Anweisung und den && -Operator, damit die Schleife mehr als eine Sache tut ...
Also mache ich es immer so
quelle
&&
in der Schleife ist die gleiche wie zu jeder anderen Zeit, nicht wahr? Benötigen Sie das zweite, was nur passiert, wenn das erste passiert, dann reicht die Verwendung von&&
else;
aus. Wirklich, Sie möchten den Inhalt dieser Schleife kurz und einfach halten, idealerweise nur einen Befehl, also eine Funktion oder ein Skript.Verwenden Sie
watch
stattdessen eine einfache Prozessüberwachungquelle
Verwenden von
while
:Verwenden der
for
Schleife:Verwenden von
Recursion
(etwas anders als oben, Tastatur-Interrupt wird es nicht stoppen)quelle
Wenn Sie möchten, dass die while-Schleife nach einer bestimmten Bedingung stoppt und Ihr
foo
Befehl ungleich Null zurückgibt, wenn diese Bedingung erfüllt ist, können Sie die Schleife wie folgt unterbrechen:Wenn der
foo
Befehl beispielsweise Dinge in Stapeln löscht und 1 zurückgibt, wenn nichts mehr zu löschen ist.Dies funktioniert gut, wenn Sie ein benutzerdefiniertes Skript haben, das einen Befehl bis zu einer bestimmten Bedingung mehrmals ausführen muss. Sie schreiben das Skript, mit
1
dem beendet werden soll, wenn die Bedingung erfüllt ist, und beenden das Skript,0
wenn es erneut ausgeführt werden soll.Angenommen, Sie haben ein Python-Skript,
batch_update.py
das 100 Zeilen in einer Datenbank aktualisiert und zurückgibt,0
wenn mehr zu aktualisieren sind und1
wenn keine mehr vorhanden sind. Mit dem folgenden Befehl können Sie die Zeilen 100 gleichzeitig aktualisieren, wobei zwischen den Aktualisierungen 5 Sekunden lang geschlafen wird:quelle
foo
Befehl mit Code,1
wenn die while-Schleife unterbrochen werden soll. Ich habe meine Antwort mit einem Beispiel aktualisiert.Wenn ich zwei praktische Beispiele nennen kann (mit ein bisschen "Emotion").
Dies schreibt den Namen aller Dateien, die mit ".jpg" enden, in den Ordner "img":
Dies löscht sie:
Ich versuche nur, einen Beitrag zu leisten.
quelle
ls -1 *.jpg
undrm *.jpg
Sie können dies auch versuchen. WARNUNG: Dies sollten Sie nicht tun, aber da die Frage nach einer Endlosschleife ohne Ende fragt ... so könnten Sie es tun.
quelle