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