Esegui
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
Spiegazione:watch
imposta alcune variabili env aggiuntive, vale a dire COLUMNS
e LINES
. Questo può essere facilmente verificato confrontando env | grep COLUMNS
e watch 'env | grep COLUMNS'
.
Quando COLUMNS
è impostato, ps
tronca il suo output a quel numero di caratteri in una riga, anche se l'output viene reindirizzato a grep
(o qualsiasi altra cosa). (ps
, perché mi fai questo?). Forzare COLUMNS
vuoto all'interno di watch
il comando di è sufficiente per rendere ps
funziona come OP (e io) previsto.
A proposito, per evitare watch
e grep
processi che fanno parte del tuo output osservato, prendi in considerazione l'aggiunta di []
come questo:
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(Naturalmente, consiglierei di familiarizzare con pgrep
anche. Altre risposte saranno utili in questo.)
Come menzionato nella modifica della domanda e nella risposta di xzfc, il problema sembra essere correlato al ritorno a capo di tmux. Per qualcosa di più vicino a una sostituzione immediata di ps aux | grep [q]uote
, se non hai bisogno di informazioni sull'utente, prova:
$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote
$ watch pgrep -af [q]uote
Il -a
flag fa in modo che l'output includa gli argomenti della riga di comando, mentre -f
ti permette di cercare gli argomenti della riga di comando così come solo il nome del processo.
ps
è un'utilità che produce un output leggibile dall'uomo e fare affidamento sul grepping del testo leggibile dall'uomo è una cattiva idea. Dovresti usare pgrep myShittyProcess
invece di ps aux | grep myShittyProcess
. pgrep
produce un semplice elenco di pid e, se desideri un output meno noioso, puoi passare pgrep
l'output di ps
:
ps -opid,user,args -p `pgrep myShittyProcess`
Per usare quella riga con watch
dovresti racchiuderlo in ' '
(non " "
) per impedire la sostituzione anticipata dei comandi della shell:
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'