So verwenden Sie den Überwachungsbefehl mit einer Pipe-Kette von Befehlen/Programmen

So verwenden Sie den Überwachungsbefehl mit einer Pipe-Kette von Befehlen/Programmen

Normalerweise verwende ich watchein Linux-Dienstprogramm, um die Ausgabe eines Befehls alle nSekunden wiederholt anzusehen, wie in watch df -h /some_volume/.

watchAber ich kann es anscheinend nicht mit einer Pipe-Befehlsreihe wie diesen verwenden :

$ watch ls -ltr|tail -n 1

Wenn ich das mache, watchwird wirklich beobachtet ls -ltrund die Ausgabe wird an weitergegeben, tail -n 1was aber nichts ausgibt.

Wenn ich dies versuche:

$ watch (ls -ltr|tail -n 1)

Ich bekomme

$ watch: syntax error near unexpected token `ls'

Und eines der folgenden Elemente schlägt aus irgendeinem Grund 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 tun Sie Folgendes:

$ watch echo $(ls -ltr|tail -n 1)

Ich sehe im angegebenen Intervall keine Änderung in der Ausgabe, da der darin enthaltene Befehl $()nur einmal ausgeführt wird und die resultierende Ausgabezeichenfolge immer als Literal gedruckt („beobachtet“) wird.

Wie kann ich also dafür sorgen, dass der watchBefehl mit einer weitergeleiteten Befehlskette funktioniert [außer indem ich sie in ein Skript einfüge]?

Antwort1

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

Antwort2

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

lassen Sie uns in einer Reihe rohren und laufen.

Antwort3

Verwenden Sie eine Kombination aus einfachen ( ') und doppelten Anführungszeichen ( "). Beispiel:

watch -n 1 "links -dump 127.0.0.1/server-status | grep -e '\S' -Fe 'www.'"

Antwort4

Angenommen, Sie führen einen Befehl aus und möchten ihn dann beobachten. Verwenden Sie:

ls -lrt | tail -n20; date
watch "!!"

verwandte Informationen