Ich möchte einen Alias definieren, der alle x Sekunden einen Befehl ausführt, bis ein zugrunde liegender Prozess eine bestimmte Ausgabe liefert. Dann sollte der Befehl nicht mehr ausgeführt werden.
Ist das möglich und wenn ja, wie? Hilfe wird sehr geschätzt.
Ich bin fast zufrieden mit
alias test1='while true; do <command>; sleep 1; done'
außer ich muss es manuell stoppen und kann es daher nicht dazu bringen, einen neuen Befehl auszuführen, sobald er fertig ist.
Der Grund für die Frage: Dropbox synchronisiert sich bei der Arbeit schlecht. Manchmal muss ich es neu starten. Ich möchte dies mit einem Befehl tun, der auch angibt, wann die Synchronisierung abgeschlossen ist, z. B. mit
alias drop='dropbox stop && dropbox start && while true; do dropbox status; sleep 1; done'
Ich möchte, dass die Wiederholung gestoppt wird, wenn Dropbox 'Up to date' ausgibt.
quelle
Verwenden Sie, wie Jacob sagt, die Bedingung für die Schleife. Ich schlage eine
until
Schleife vor:until
wird ausgeführt, bis der Befehl true zurückgibt.dropbox status
Dann enthält die AusgabeUp to date
.quelle
[ "$(dropbox status)" != "Up to date" ]
mituntil
- ersetzen Sie einfach!=
mit=
. Im Wesentlichenuntil
istwhile
mit Engation.Definieren Sie es als eine Funktion in Ihrem
$HOME/.bashrc
Jetzt habe ich keine
dropbox
cmd-App. Je nachdem, wie der Status ausgegeben wird, können Sie sie mitAWK
oder verarbeitengrep
.Beachten Sie jedoch, dass Sie die Ausgabe entweder auf Wert speichern oder die Ausgabe auf einen anderen Befehl umleiten und auswerten können. Sobald wir eine bestimmte Ausgabezeichenfolge erhalten - break
quelle