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`'