Es gibt einen eingebauten Unix-Befehl repeat
dessen erstes Argument die Anzahl der Wiederholungen eines Befehls ist, wobei der Befehl (mit beliebigen Argumenten) durch die verbleibenden Argumente für repeat
angegeben wird .
Zum Beispiel
% repeat 100 echo "I will not automate this punishment."
wird die gegebene Zeichenkette 100 Mal echoen und dann stoppen.
Ich hätte gerne einen ähnlichen Befehl – nennen wir ihn forever
– das funktioniert ähnlich, außer dass das erste Argument die Anzahl der Sekunden ist, die zwischen Wiederholungen pausiert werden soll, und es wiederholt sich für immer. Zum Beispiel
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
Ich dachte, ich frage, ob so etwas existiert, bevor ich es schreibe. Ich weiß, dass es wie ein zweizeiliges Perl- oder Python-Skript ist, aber vielleicht gibt es einen Standardweg, dies zu tun. Wenn nicht, können Sie gerne eine Lösung in Ihrer bevorzugten Skriptsprache posten.
PS:Vielleicht wäre es besser, repeat
zu verallgemeinern um sowohl die Anzahl der Wiederholungen (wobei -1 unendlich bedeutet) als auch die Anzahl der Sekunden zwischen den Wiederholungen zu nehmen.
Die obigen Beispiele würden dann zu:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Akzeptierte Antwort:
Probieren Sie die watch
aus Befehl.
Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
Damit:
watch -n1 command
führt den Befehl jede Sekunde aus (naja, technisch gesehen jede Sekunde plus die Zeit, die für command
benötigt wird um als watch
ausgeführt zu werden (zumindest die procps
und busybox
Implementierungen) schläft nur eine Sekunde zwischen zwei Ausführungen von command
), für immer.
Möchten Sie den Befehl an exec
übergeben statt sh -c
verwenden Sie -x
Möglichkeit:
watch -n1 -x command
Unter macOS erhalten Sie watch
von Mac Ports:
port install watch
Oder Sie können es von Homebrew bekommen:
brew install watch