Spustit
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
Vysvětlení:watch nastavuje určité další proměnné env, jmenovitě COLUMNS a LINES . To lze snadno ověřit porovnáním env | grep COLUMNS a watch 'env | grep COLUMNS' .
Když COLUMNS je nastaveno, ps zkrátí svůj výstup na tolik znaků v řádku, i když je výstup přesměrován na grep (nebo cokoliv jiného). (ps , proč mi to děláš?). Vynucení COLUMNS být prázdný v rámci watch Příkaz 's postačuje k vytvoření ps pracovat tak, jak OP (a já) očekávám.
Btw, vyhnout se watch a grep procesy, které jsou součástí vašeho sledovaného výstupu, zvažte přidání [] takhle:
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(Samozřejmě doporučuji seznámit se s pgrep také. S tím vám pomohou další odpovědi.)
Jak je uvedeno v úpravě otázky a odpovědi xzfc, zdá se, že problém souvisí s zalamováním řádků tmux. Něco blíže k drop-in nahrazení ps aux | grep [q]uote , pokud nepotřebujete informace o uživateli, zkuste:
$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote
$ watch pgrep -af [q]uote
-a flag způsobí, že výstup bude obsahovat argumenty příkazového řádku, zatímco -f umožňuje prohledávat argumenty příkazového řádku i pouze název procesu.
ps je nástroj, který vytváří výstup čitelný pro člověka a spoléhat se na uchopení textu čitelného člověkem je špatný nápad. Měli byste použít pgrep myShittyProcess místo ps aux | grep myShittyProcess . pgrep vytváří holý seznam pid, a pokud chcete méně nudný výstup, můžete předat pgrep výstup na ps :
ps -opid,user,args -p `pgrep myShittyProcess`
Chcete-li použít tuto jednu vložku s watch měli byste jej uzavřít do ' ' (nikoli " " ), abyste zabránili předčasnému nahrazení příkazů shellu:
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'