Frage Verwenden der Uhr mit Rohren


Ich möchte diesen Befehl ausführen:

watch -n 1 tail -n 200 log/site_dev.log | grep Doctrine

Aber es läuft nicht, weil "ich denke", dass der Grep versucht, auf der Uhr statt dem Schwanz zu laufen ...

Gibt es einen Weg, etwas zu tun?

watch -n 1 (tail -n 200 log/site_dev.log | grep Doctrine)

Danke vielmals!


147
2018-05-12 19:23


Ursprung




Antworten:


Umgeben Sie den Befehl mit Anführungszeichen

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

234
2018-05-12 19:28



Was ist, wenn die Pipeline auch Anführungszeichen enthält (z. B. awk '{print $3}') Bearbeiten: So was - OrangeDog


Ich könnte mich irren, aber würde das nicht das Gleiche erreichen (indem man die passenden Log-Zeilen sieht, wenn sie hinzugefügt werden), einfacher?

tail -f -n 200 log/site_dev.log | grep Doctrine

27
2018-05-12 20:16



Ich stimme zu, dass dies hinsichtlich der CPU effizienter sein kann, aber im Zusammenhang mit dem Thema "Verwenden von Uhr mit Pfeifen" wird keine Uhr verwendet, daher ist dies keine Antwort. Dies könnte ein Fall einer schlechten Beispielfrage sein, da Uhren und Pfeifen häufig nicht im Zusammenhang mit dem Schwanz erscheinen. - tudor
Nein, ich denke du verwirrst die Mittel und das Ende. Der Benutzer wollte eindeutig sehen Doctrine Er kam in eine wachsende Datei und als er in seinen Werkzeugkasten schaute, war das Einzige, was er fand watch. Was er wirklich wissen musste war tail -f. Siehe auch meta.stackexchange.com/questions/66377/what-is-the-xy-problem - dland
Ich denke, das sind beide akzeptable Antworten. Die oberste und akzeptierte Antwort beantwortet die genaue Frage richtig und diese Antwort identifiziert die XY-Problem Dieses OP erstellt für sich selbst und bietet die Lösung, die sie wirklich wollten. Beide Antworten könnten für jemanden nützlich sein, der diese Frage beantwortet. - cdhowie
Ich suchte nach einer Möglichkeit, zuzusehen shellcheck *.sh | grep line | wc -l und die angenommene Antwort war nützlich für mich. - Amedee Van Gasse


Sie können den Befehl mit Anführungszeichen umgeben:

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

Wenn der Befehl Anführungszeichen enthält, können Sie eine andere Art von Anführungszeichen mit entsprechendem Escaping verwenden:

watch -n 1 $'tail -n 200 log/site_dev.log | fgrep \'Doctrine.*\''

Wenn Sie versuchen, etwas wirklich schlaues zu tun, legen Sie den Befehl oder die Befehle in ein Skript und verwenden Sie das mit watch:

cat <<EOF >/tmp/watch-command
tail -n 200 $(pwd)/log/site_dev.log | fgrep Doctrine
EOF
chmod +x /tmp/watch-command
watch /tmp/watch-command

Stellen Sie sicher, dass Sie bei Bedarf relative Pfade berücksichtigen.


0
2017-08-27 16:00