![So verwenden Sie den Überwachungsbefehl mit einer Pipe-Kette von Befehlen/Programmen](https://rvso.com/image/97221/So%20verwenden%20Sie%20den%20%C3%9Cberwachungsbefehl%20mit%20einer%20Pipe-Kette%20von%20Befehlen%2FProgrammen.png)
Normalerweise verwende ich watch
ein Linux-Dienstprogramm, um die Ausgabe eines Befehls alle n
Sekunden wiederholt anzusehen, wie in watch df -h /some_volume/
.
watch
Aber ich kann es anscheinend nicht mit einer Pipe-Befehlsreihe wie diesen verwenden :
$ watch ls -ltr|tail -n 1
Wenn ich das mache, watch
wird wirklich beobachtet ls -ltr
und die Ausgabe wird an weitergegeben, tail -n 1
was 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 watch
Befehl 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 "!!"