Ausführen
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
Erläuterung:watch
setzt bestimmte zusätzliche env-Variablen, nämlich COLUMNS
und LINES
. Dies kann leicht durch den Vergleich von env | grep COLUMNS
überprüft werden und watch 'env | grep COLUMNS'
.
Wenn COLUMNS
eingestellt ist, ps
kürzt seine Ausgabe auf so viele Zeichen in einer Zeile, selbst wenn die Ausgabe an grep
geleitet wird (oder sonst was). (ps
, warum tust du mir das an?). Erzwingen von COLUMNS
innerhalb von watch
leer sein Der Befehl von reicht aus, um ps
zu erstellen funktionieren wie OP (und ich) erwartet.
Übrigens, um watch
zu vermeiden und grep
Prozesse, die Teil Ihrer überwachten Ausgabe sind, sollten Sie erwägen, []
hinzuzufügen so:
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(Natürlich würde ich empfehlen, sich mit pgrep
vertraut zu machen zu. Andere Antworten werden dabei hilfreich sein.)
Wie in der Fragebearbeitung und der Antwort von xzfc erwähnt, scheint das Problem mit dem Zeilenumbruch von tmux zusammenzuhängen. Für etwas, das einem Drop-in-Ersatz von ps aux | grep [q]uote
näher kommt , wenn Sie keine Benutzerinformationen benötigen, versuchen Sie:
$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote
$ watch pgrep -af [q]uote
Die -a
Flag sorgt dafür, dass die Ausgabe die Befehlszeilenargumente enthält, während -f
lässt Sie die Befehlszeilenargumente sowie nur den Prozessnamen durchsuchen.
ps
ist ein Dienstprogramm, das eine für Menschen lesbare Ausgabe erzeugt, und sich darauf zu verlassen, dass für Menschen lesbarer Text erfasst wird, ist eine schlechte Idee. Sie sollten pgrep myShittyProcess
verwenden statt ps aux | grep myShittyProcess
. pgrep
erzeugt eine bloße Liste von PIDs, und wenn Sie eine weniger langweilige Ausgabe wünschen, können Sie pgrep
übergeben 's Ausgabe an ps
:
ps -opid,user,args -p `pgrep myShittyProcess`
Um diesen Einzeiler mit watch
zu verwenden Sie sollten es in ' '
einschließen (nicht " "
), um eine vorzeitige Substitution von Shell-Befehlen zu verhindern:
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'