Verwendung des Befehls watch mit einer Pipe-Kette von Befehlen / Programmen


50

Normalerweise watchbenutze 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, watchmit einer Pipe-Reihe von Befehlen wie:

$ watch ls -ltr|tail -n 1

Wenn ich das mache, watchgucke ich wirklich ls -ltrund die Ausgabe wird an die weitergeleitet, tail -n 1die 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 watchBefehl mit einer Pipe-Kette von Befehlen arbeiten [abgesehen davon, dass sie in ein Skript eingefügt werden]?


laufen man watchund nach unten scrollen , um Beispielen ...
don_crissti

Antworten:


80
watch 'command | othertool | yet-another-tool'

1
Erwähnenswert wäre auch der generische Ansatz, watch sh -c 'command | etc'insbesondere die in der Frage erprobten Ansätze.
Sourcejedi

@sourcejedi Ich habe nicht wirklich herausgefunden, warum, aber dies führt nicht immer zu den gleichen Ergebnissen.
Michael Mior

10
watch -n 1 "ls -lrt | tail -n20; date"

Lass uns pfeifen und in einer Reihe rennen.


Wofür ist das -n 1?
Nam G VU

2
@NamGVU: Führen Sie den Befehl alle 1 Sekunde aus
Duc Tran

1

Wenn Sie auch alle Dateien in Unterverzeichnissen auflisten möchten, können Sie den Befehl find mit der Option exec verwenden.

watchwird alle 30 Sekunden aktualisiert und findsucht nach allen * .log-Dateien im aktuellen Verzeichnis (einschließlich Unterverzeichnissen) und gibt die Dateinamen und ihre letzten 10 Zeilen aus:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.