Wie kann ich einen Befehl jedes Mal wiederholen , damit ich Befehle zum Überprüfen oder Überwachen von Verzeichnissen ausführen kann ?
Es wird kein Skript benötigt, ich brauche nur einen einfachen Befehl, um im Terminal ausgeführt zu werden.
Wie kann ich einen Befehl jedes Mal wiederholen , damit ich Befehle zum Überprüfen oder Überwachen von Verzeichnissen ausführen kann ?
Es wird kein Skript benötigt, ich brauche nur einen einfachen Befehl, um im Terminal ausgeführt zu werden.
Sie können watch
befehl verwenden. Watch wird verwendet, um einen bestimmten Befehl in regelmäßigen Abständen auszuführen.
Öffnen Sie das Terminal und geben Sie Folgendes ein:
watch -n x <your command>
Ändern Sie x , um die gewünschte Zeit in Sekunden anzugeben.
Wenn Sie weitere Hilfe zur Verwendung des watch
Befehls und seiner Optionen benötigen, führen man watch
Sie diesen Link aus oder besuchen Sie ihn .
Beispiel: Die folgende Liste listet alle 60 Sekunden auf demselben Terminal den Inhalt des Desktop-Verzeichnisses auf, damit Sie wissen, ob Änderungen vorgenommen wurden:
watch -n 60 ls -l ~/Desktop
watch -n 1 'echo $COLUMNS'
und aus,watch -n 1 echo $COLUMNS
wenn Sie die Größe Ihres Terminals ändern - das erste wird jede Sekunde erweitert, das zweite wird jedoch nur einmal erweitert, bevor eswatch
gestartet wird.watch
Befehl vom Typ "history enabled" zu verwenden? Ich benutze es sehr gernewatch
, aber manchmal würde ich es vorziehen, auch ein Protokoll früherer Hinrichtungen zu sehen, anstatt nur das letzte. Und ja, ich weiß, dass ich Scripting (while true
) verwenden kann, um dies zu erreichen, aber die Verwendung deswatch
Dienstprogramms ist so viel sauberer!Sie können diesen Befehl auch im Terminal verwenden, abgesehen von der Antwort von nux:
Beispiel
Dieser Befehl druckt die Ausgabe
ls
im Abstand von 2 Sekunden.Mit Ctrl+ Cbeenden Sie den Vorgang.
Es gibt einige Nachteile von
watch
watch
interpretiert ANSI-Farbsequenzen, die Escape-Zeichen mit der Option-c
oder übergeben--color
. Zum Beispiel wird die Ausgabe vonpygmentize
funktionieren, aber es wird fehlschlagenls --color=auto
.Unter den oben genannten Umständen kann dies als bessere Option erscheinen.
quelle
watch
gibt es dafür, das ist ein bisschen nutzlos würde ich sagenwatch
ist in den meisten Fällen gut. Deshalb habe ich am Anfang "abgesehen von der Antwort von nux" erwähnt. Es gibt aber nur wenige Probleme mitwatch
zum Beispiel Man kann keine mit Alias versehenen Befehle mit verwendenwatch
. Nehmen wir zum Beispielll
das, was voreingenommen ist,ls -laF
aber nicht verwendet werden kannwatch
. Auch für den Fall, dass die Ausgabe eines Befehls sehr lang ist, können Sie beim Scrollen mit Schwierigkeiten habenwatch
. In diesen wenigen Sonderfällen scheint diese Antwort eine bessere Option zu sein.watch
mindestens die Optionen-c
oder--color
für die farbige Ausgabe zulässig .while sleep x
ist besser - es ist einfacher zu töten.watch
behält im Gegensatz dazu den Befehlsverlauf bei.Ich wollte nur auf die Antworten von souravc und nux eingehen :
watch
es unter Ubuntu perfekt funktioniert, möchten Sie vielleicht vermeiden, dass Ihr "Unix-fu" rein ist - unter FreeBSD ist watch beispielsweise ein Befehl, um "in einer anderen tty-Zeile zu suchen".while true; do command; sleep SECONDS; done
hat auch eine Einschränkung - Ihr Befehl ist möglicherweise schwieriger mit STRG + C zu töten . Vielleicht möchten Sie es vorziehenwhile sleep SECONDS; do command; done
- es ist nicht nur kürzer, sondern auch leichter zu unterbrechen. Die Einschränkung besteht darin, dass zuerst der Ruhezustand aktiviert und dannSECONDS
der Befehl ausgeführt wird. Daher müssen Sie einige Sekunden warten, bis der Befehl zum ersten Mal ausgeführt wird.quelle
sleep
in diewhile
Schleife setzen? Ich konnte keinen Unterschied feststellen. Strg + C hat die Schleife sofort unterbrochen, egal was passiert.command
und tötensleep
und nur brechen, wenn Sie tötentrue
.Klingt nach einer idealen Aufgabe für den
cron
Daemon, bei der periodische Befehle ausgeführt werden können. Führen Sie dencrontab -e
Befehl aus, um die Cron-Konfiguration Ihres Benutzers zu bearbeiten. Das Format ist in crontab (5) dokumentiert . Grundsätzlich haben Sie fünf zeitbezogene, durch Leerzeichen getrennte Felder, gefolgt von einem Befehl:Wenn Sie beispielsweise jeden Dienstag um 11:00 Uhr ein Python-Skript ausführen möchten:
Es gibt auch einige spezielle Namen, die die Zeit ersetzen, wie z
@reboot
. Sehr hilfreich, wenn Sie ein temporäres Verzeichnis erstellen müssen. Aus meiner Crontab (gelistet mitcrontab -l
):quelle
cron
läuft eher hinter dieWenn Sie das Dateisystem überwachen,
inotifywait
ist dies brillant und belastet Ihr System mit Sicherheit weniger.Beispiel
Im ersten Terminal geben Sie diesen Befehl ein:
Dann in 2. Terminal, jeder Befehl, der das aktuelle Verzeichnis betrifft,
Dann wird in dem ursprünglichen Terminal inotifywait aufwachen und das Ereignis melden
Oder in einer Schleife
quelle
grep something InALogFile|less
ist das ein Skript?.
ich den Befehl nicht auslassen kann.-m
ohne Schleife kontinuierlich überwachen kann .Sie können Ihren eigenen
repeat
Befehl erstellen, indem Sie die folgenden Schritte ausführen: Credits hier :Öffnen Sie zuerst Ihre
.bash_aliases
Datei:Fügen Sie als zweites diese Zeilen am Ende der Datei ein und speichern Sie:
Drittens können Sie entweder Ihr Terminal schließen und wieder öffnen oder Folgendes eingeben:
Et voilà! Du kannst es jetzt so benutzen:
oder
quelle
Sie können Crontab verwenden. Führen Sie den Befehl aus
crontab -e
und öffnen Sie ihn mit Ihrem bevorzugten Texteditor. Fügen Sie dann diese Zeile hinzuDadurch wird Ihr Befehl alle 10 Minuten ausgeführt
Dadurch wird Ihr Befehl alle 4 Stunden ausgeführt
Eine andere mögliche Lösung
X Anzahl der Wiederholungen.
Y Zeit zu warten, um zu wiederholen.
Beispiel
quelle
Ein weiteres Problem bei dem oben vorgeschlagenen "Watch" -Ansatz besteht darin, dass das Ergebnis nur angezeigt wird, wenn der Vorgang abgeschlossen ist. "date; sleep 58; date" zeigt die 2 Daten erst nach 59 Sekunden an ... Wenn Sie etwas starten, das 4 Minuten läuft und langsam mehrere Seiten mit Inhalten anzeigt, werden Sie es nicht wirklich sehen.
Auf der anderen Seite besteht das Problem beim "while" -Ansatz darin, dass die Aufgabendauer nicht berücksichtigt wird.
Mit diesem Befehl wird das Skript einmal alle Minuten ausgeführt, manchmal dauert es 1: 40 Minuten. Selbst wenn ein Cron es alle Minuten ausführen kann, ist dies hier nicht der Fall.
Um die Ausgabe auf der Shell zu sehen, während sie generiert wird, und auf die genaue Anforderungszeit zu warten, müssen Sie die Zeit davor und danach betrachten und eine Schleife mit der while-Anweisung durchführen.
So etwas wie:
Dies gibt Folgendes aus:
Wie Sie sehen, wird der Befehl alle Minuten ausgeführt:
Ersetzen Sie also einfach den
echo $(( ( RANDOM % 30 ) + 1 ))
Befehl "sleep " durch einen beliebigen Befehl, der auf dem Terminal / der Shell genau jede Minute ausgeführt wird. Wenn Sie einen anderen Zeitplan wünschen, ändern Sie einfach die "60" Sekunden nach Bedarf.Kürzere Version ohne die Debug-Zeilen:
quelle