¿Ver la salida de "ps aux | grep blah" en tmux no funcionará?

¿Ver la salida de "ps aux | grep blah" en tmux no funcionará?

Estoy intentando ejecutar esto watch "ps aux | grep myShittyProcess"en una sesión tmux. Este proceso myShittyProcesstambién se inició en una sesión tmux. Funciona ps auxsin mando de reloj. Pero tan pronto como lo pongo en vigilancia, no se ejecuta. ¿Cómo hacer que esto funcione?

-- editar -

Descubrí que cambiar el tamaño de tmux a pantalla completa hace que funcione. Algo que tiene que ver con psel ajuste de salida y grepno se puede encontrar dentro del contexto ajustado.

Respuesta1

Como se menciona en la pregunta editar yLa respuesta de xzfc, el problema parece estar relacionado con el ajuste de línea de tmux. Para algo más parecido a un reemplazo directo de ps aux | grep [q]uote, si no necesita información del usuario, intente:

$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote

$ watch pgrep -af [q]uote

La -abandera hace que la salida incluya los argumentos de la línea de comando, mientras que -fle permite buscar los argumentos de la línea de comando, así como solo el nombre del proceso.

Respuesta2

Correr

watch "COLUMNS= ps aux | grep TheProcessYouWatch"

Explicación: watchestablece ciertas variables ambientales adicionales, a saber COLUMNSy LINES. Esto se puede verificar fácilmente comparando env | grep COLUMNSy watch 'env | grep COLUMNS'.

Cuando COLUMNSestá configurado, pstrunca su salida a esa cantidad de caracteres en una línea, incluso si la salida se canaliza a grep(o cualquier otra cosa). ( ps, ¿Por qué me haces esto?). Forzar COLUMNSel estado vacío dentro watchdel comando es suficiente para que psfuncione como OP (y yo) esperábamos.

Por cierto, para evitar watchque greplos procesos formen parte del resultado observado, considere agregar algo []así:

watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"

(Por supuesto, también recomendaría familiarizarse con esto pgrep. Otras respuestas serán útiles con esto).

Respuesta3

pses una utilidad que produce resultados legibles por humanos, y confiar en la recopilación de texto legible por humanos es una mala idea. Deberías usar pgrep myShittyProcessen lugar de ps aux | grep myShittyProcess. pgrepproduce una lista simple de pids, y si desea una salida menos aburrida, puede pasar pgrepla salida a ps:

ps -opid,user,args -p `pgrep myShittyProcess`

Para usar esa frase, watchdebe incluirla entre ' '(no " ") para evitar la sustitución temprana del comando Shell:

watch 'ps -opid,user,args -p `pgrep myShittyProcess`'

información relacionada