Últimamente, he estado experimentando con el pscomando y, a veces, los caminos largos se envuelven a la siguiente línea (o dos) y dificultan la lectura. Quiero canalizar la pssalida a otro programa para limitar la salida al xnúmero de caracteres.
Esto es lo que tengo hasta ahora, pero no funciona del todo bien:
ps aux | cut -c1-$(stty size | cut -d' ' -f2)
$(stty size | cut -d' ' -f2)evalúa a 167, pero no parece ser una entrada válida para cut.
¿Hay alguna manera de hacer que este tipo de sintaxis funcione en bash?

tput rmam; ps auxzsh,ksh93obashalmacenan el ancho de la terminal en$COLUMNSRespuestas:
Los siguientes trabajos:
Esto también funciona:
El problema parece ser que
sttynecesita tener el tty en su entrada estándar para funcionar. Los dos enfoques anteriores resuelven eso.Todavía hay otra opción. Mientras que
sttystdin y stdout se redirigen en los comandos anteriores, su stderr no lo es: todavía apunta a una terminal. Curiosamente,sttytambién funcionará si se le da stderr como entrada:fuente
teese agregó cuando estaba depurando. Se ha ido ahora.<&2significa obtener su entrada del error estándar.sttyobtiene la configuración del terminal abierta en su stdin (stty < /dev/other-ttypor ejemplo , para obtener la configuración de otro terminal). Por lo tanto, no es extraño que no funcione si su stdin es una tubería o eso<&2funciona.A algunos shells les gusta
zsh,bashomkshconfiguran automáticamente la$COLUMNSvariable al ancho del terminal, por lo que no necesita invocarsttyaquí.Todas las implementaciones de
psTraté de soportar esa sintaxis no estándar (tipo BSD) consultan el ancho del terminal por sí mismas. Me sorprende que el tuyo no. Sin embargo, espero que vea el contenido de la variable deCOLUMNSentorno .Entonces podrías hacer:
Si no,
También puede decirle a su terminal que no ajuste las líneas:
fuente
También puede manejar la
pssalida un poco mejor.Eso le indicará
psque analice su salida según sus especificaciones según sea necesario.Por supuesto, si no ajusta la palabra, entonces tiene el problema de la falta de información. ¿Realmente lo necesitas todo para todos los procesos? Ábralo en un buscapersonas si es así:
Si no, especifique lo que desea ver:
Alternativamente, puede informar explícitamente
psde su terminal--width:La
--widthcosa funciona exactamente según sus especificaciones solicitadas sin tener que involucrar filtros adicionales o procesos auxiliares (lo que probablemente solo saturará su-auxsalida aún más). Y con lo$COLUMNSque se muestra arriba y como señala Stephane, incluso funcionará dinámicamente.Sin embargo, probablemente valga la pena señalar que encuentro que las personas a menudo intentan agregar este tipo de filtros innecesarios para que puedan acomodar uno a
|pipetravés de otro filtro para analizar la salida, que también es bastante probable que sea innecesario. Por supuesto, por personas me refiero principalmente a mí.El
-ooperando utput que menciono anteriormente le permite filtrar qué columnas sepsmuestran, y cuando agrega la=asignación, incluso puede nombrar la columna como desee. Dejo la asignación vacía y le doy un-pproceso de destino$pidpara que la única salida depstodos sea el$pidnombre del comando y suargsinvocación. Y-oapenas rasca la superficie de cómo puedes definir lo que sepsmostrará o no. Esta es la dirección que le recomendaría que tome, especialmente a través de:fuente