Das Ändern der Terminalgröße hat Auswirkungen auf die Ausgabe von grep innerhalb eines Watch-Befehls

938
jonderry

Wenn ich einen Befehl wie:

watch "ps -ef | grep '^foo.*bar'" 

und die übereinstimmende Ausgabezeile von ps -efist eine lange Zeile

foo <lots and lots of text here> bar 

Ob diese Zeile ausgegeben wird, hängt von der Terminalgröße ab. Wenn das Terminal beispielsweise als Vollbild angezeigt wird und diese Zeile auf dem Bildschirm angezeigt wird, wird die Ausgabe in Watch angezeigt. Wenn ich jedoch die Fenstergröße auf die Hälfte der Bildschirmgröße verkleinere, so dass der Balken vom Bildschirm abgeschnitten wird, wird die Grep-Linie vollständig ausgeblendet (vermutlich wird die Linie abgeschnitten, bevor sie in der Pipeline grep wird). Dies ist ein Problem, weil ich versuche, einen Teil dieser Zeile für die spätere Verwendung zu extrahieren.

Gibt es eine Lösung, um zu verhindern, dass die Terminalgröße die Ausgabe von grep innerhalb eines Überwachungsbefehls beeinflusst?

1

2 Antworten auf die Frage

2
grawity

Es ist nicht grep, es ist ps . Fügen Sie die -wwOptionen ( ps -efww) hinzu, um alle Zeilen immer auszugeben.

1
garyjohn

Ich weiß nicht, was die richtigen Lösungen sind, aber das scheint das Problem zu beheben.

watch "COLUMNS=160 ps -ef | grep '^foo.*bar'" 

auf Kosten der Zeilen von ps gefaltet. Ändern Sie "160", um lang genug für die längste "foo. * Bar" -Linie zu sein, die Sie erwarten.