Normalerweise watch
benutze ich ein Linux-Dienstprogramm, um die Ausgabe eines Befehls wiederholt alle n Sekunden zu sehen, wie inwatch df -h /some_volume/
Aber ich scheine nicht in der Lage zu sein, watch
mit einer Pipe-Reihe von Befehlen wie:
$ watch ls -ltr|tail -n 1
Wenn ich das mache, watch
gucke ich wirklich ls -ltr
und die Ausgabe wird an die weitergeleitet, tail -n 1
die nichts ausgibt.
Wenn ich das versuche:
$ watch (ls -ltr|tail -n 1)
Ich bekomme
$ watch: syntax error near unexpected token `ls'
Und einer der folgenden Gründe schlägt fehl:
$ watch <(ls -ltr|tail -n 1)
$ watch < <(ls -ltr|tail -n 1)
$ watch $(ls -ltr|tail -n 1)
$ watch `ls -ltr|tail -n 1)`
Und schließlich, wenn Sie dies tun:
$ watch echo $(ls -ltr|tail -n 1)
Ich sehe keine Änderung in der Ausgabe im angegebenen Intervall, da der Befehl $()
nur einmal ausgeführt wird und die resultierende Ausgabezeichenfolge immer als Literal gedruckt ("überwacht") wird.
Wie lasse ich den watch
Befehl mit einer Pipe-Kette von Befehlen arbeiten [abgesehen davon, dass sie in ein Skript eingefügt werden]?
man watch
und nach unten scrollen , um Beispielen ...Antworten:
quelle
watch sh -c 'command | etc'
insbesondere die in der Frage erprobten Ansätze.Lass uns pfeifen und in einer Reihe rennen.
quelle
-n 1
?Wenn Sie auch alle Dateien in Unterverzeichnissen auflisten möchten, können Sie den Befehl find mit der Option exec verwenden.
watch
wird alle 30 Sekunden aktualisiert undfind
sucht nach allen * .log-Dateien im aktuellen Verzeichnis (einschließlich Unterverzeichnissen) und gibt die Dateinamen und ihre letzten 10 Zeilen aus:quelle