¿Cómo salgo de la parte superior sin dejar la salida en el terminal?

30

¿Cómo puedo topdejar de fumar de manera similar a la forma en que se lesscierra, es decir, sin dejar atrás su salida en la pantalla?

Esta es la versión que tengo:

procps-ng version 3.3.9
Arraval
fuente
¿Qué tal usar una alternativa, como htop?
DarkHeart

Respuestas:

48

Cuando comienzas así ...

top && clear

... la pantalla se borra después de salir de la parte superior con q.

Esto actúa más como less:

tput smcup ; top ; tput rmcup

( smcupcambia a una pantalla secundaria donde topse ejecuta el comando y cuando sale top rmcupvuelve a la pantalla normal)


Puede alias el comando superior para hacer eso ( ¿Cómo creo un alias Bash permanente? )

Rinzwind
fuente
3
clearparece borrar todo excepto la última pantalla del búfer de desplazamiento hacia atrás (por lo que, en este caso, solo salgo de la última pantalla de la parte superior), al menos en xfce4-terminal y QTerminal. La tputrespuesta funciona muy bien, especialmente en un alias paratop
Xen2050
2
No olvide Ctl + L para una solución rápida.
jpaugh
Oh, interesante; Me preguntaba por qué lessla última salida desapareció por completo del búfer.
Lightness compite con Monica el
Algunas otras sugerencias: 1. use el muy superior-pero-no-incorporado htop, y 2. alias los comandos juntos para que no tenga que encadenarlos manualmente cada vez.
Flith
@flith No voy a robar las respuestas de otros usuarios ;-)
Rinzwind
31

Irónicamente 1 , este fue brevemente el comportamiento de top. En 3.3.8, borró topla pantalla, pero no en versiones pasadas o posteriores. Ver error de Red Hat # 977561 :

El borrado de la pantalla es un resultado indirecto de los cambios en las manipulaciones de terminales que introdujo Jim Warner (autor de la herramienta 'superior') para evitar que se inunde la herramienta 'superior' con señales SIGWINCH generadas por algunas de las aplicaciones de terminal ampliamente utilizadas. Fui yo quien informó el problema de las inundaciones y trató de hacer todo lo posible para resolverlo y lanzó una solución para el problema en forma de 8 confirmaciones separadas. El commit que presenta el borrado de la pantalla tiene el siguiente hash: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Debido al informe de error, Jim lo arregló para que nuevamente no borrara la salida en 3.3.9 .

topno tiene opciones o ajustes de configuración para controlar esto, AFAICT, este es un comportamiento totalmente codificado. Es posible que desee presentar una solicitud de función en https://gitlab.com/procps-ng/procps/issues/ .

Hasta entonces, puede hacer clearmanualmente la sugerencia de Rinzwind , o usarla tputcomo sugiere Steeldriver.


Curiosamente, el commit mencionado anteriormente también tiene una buena explicación del comando steeldriver sugerido, porque de hecho es lo mismo que se hizo originalmente en el código:

Un búfer de desplazamiento hacia atrás utilizado en varios emuladores de terminal podría ser un verdadero inconveniente para un usuario después de algunas operaciones de cambio de tamaño. Frecuentemente se requerirían pulsaciones de tecla adicionales para representar correctamente la pantalla superior.

Después de mucho análisis descubrimos dos cadenas terminfo que tienen el efecto de deshabilitar / restaurar ese maldito búfer de desplazamiento. Estaban bien escondidos bajo el título de cadenas 'para iniciar / finalizar programas usando cup'. A su vez, 'cup' se ocupa de la capacidad de direccionamiento del cursor de un tty.

No nos importa cómo los llames o a qué se refieren siempre que hagan el trabajo. Y estos realmente lo hacen! Sin embargo, tenga en cuenta que hay algunos efectos secundarios, varios de los cuales incluso pueden considerarse beneficiosos:

  • enter_ca_mode / smcup / ti deshabilita el almacenamiento en búfer de desplazamiento (y eso es bueno, es lo que siempre habíamos esperado)

  • exit_ca_mode / rmcup / te restaura el búfer de desplazamiento hacia atrás (pero también restaura el contenido de la pantalla pre-top existente) (que es diferente de los resultados finales del programa anterior) (donde la última pantalla renderizada se dejó intacta)

... que corresponde a los comandos tput smcupy tput rmcup.


1 Obligatorio xkcd.

muru
fuente
Curiosamente, la parte superior de BSD (por ejemplo, en MacOS) también borra el terminal
Digital Trauma
15

El comportamiento que busca desde menos está integrado en una alternativa llamada htop. Puedes instalarlo con:

sudo apt-get install htop

Específicamente, cambia al modo de pantalla alternativa antes de comenzar a preservar el contenido original de la pantalla cuando cierra htop. También tiene una variedad de otras mejoras sobre la parte superior de procps. Una vez que está instalado, puede ejecutarlo como usuario normal:

htop
pingüino359
fuente
Plus htopes muy colorido, agrega soporte para mouse, etc.
WinEunuuchs2Unix
4

Podrías usar watch:

watch top -b

Se actualiza de forma predeterminada cada dos segundos, use, por ejemplo, -n1durante un segundo si desea cambiar este comportamiento. Para salir watch, presione Ctrl+ en Clugar de lo habitual Q.

Otro enfoque es abrir una nueva ventana de terminal, por ejemplo, con xterm:

xterm -e top

Este se comporta exactamente como topnormalmente se hace, se cierra la ventana cuando deje de fumar topcon Qy por supuesto que no deja de salida en el terminal de la que lo inició a partir. Agregue &al final de este comando para iniciarlo en segundo plano e inmediatamente vuelva a liberar el terminal.

postre
fuente
1

Como señala la respuesta de Rinzwind, el clearcomando borra la topsalida de la pantalla.

Después de salir top, también puede usar Ctrl+ Lpara borrar la topsalida de la pantalla. Sin embargo, después de cualquier comando, aún puede desplazarse hacia arriba en la pantalla para ver la topsalida anterior.

Para borrar realmente la pantalla, de modo que la topsalida no se pueda desplazar hacia atrás, use el resetcomando:

top && reset

Otra opción para dar ese "aspecto nuevo" de una sesión completamente nueva es ejecutar una "pantalla de bienvenida ASCII" (si tiene una). En mi caso correría:

top && reset && now && screenfetch

restablecer ahora splash.png

  • Mi nowguión llama clima, calendario ( cal) y toiletcon tiempo elegante.
  • screenfetch pinta el logotipo de Ubuntu y las estadísticas de la máquina.
WinEunuuchs2Unix
fuente
1
No recomendaría volver a ejecutarlo .bashrc regularmente sin necesidad porque generalmente hay líneas como export PATH=...:$PATHen ese archivo y ejecutarlo varias veces extenderá innecesariamente el archivo PATH. También, llamando neofetchen .bashrcno es un comportamiento estándar (aunque parece de fantasía). Por ejemplo, cuando vuelvo a ejecutar, .bashrcno ocurre nada aparente.
PerlDuck
CTRL + L y no seclear comportan igual: intente en dos ventanas nuevas y diferentes. Luego presione en window1 y escriba window2. Ahora desplácese hacia atrás en ambas ventanas (rueda del mouse). En la ventana puede ver todas las líneas (dependiendo de su búfer de desplazamiento) mientras que en la ventana solo puede retroceder una pantalla. Es decir: borra el búfer de desplazamiento hacia atrás mientras es similar a $ window_height veces presionando (también conocido como nueva línea). for i in {1..200}; do echo "line $i"; doneCTRL+LclearCTRL+LclearclearCTRL+LENTER
PerlDuck
1
@PerlDuck neofetches una buena captura, pero supongo que es un derivado llamado screenfetch. Lo uso para recordarme a mí mismo que estoy en Ubuntu porque tengo arranque dual y Windows Bash tiene una pantalla de inicio diferente. Sacaré .bashrcreferencia. En cuanto a cleary Ctrl+ Lmi punto era que son similares en que ambas permiso topde salida en el desplazamiento hacia atrás de amortiguamiento.
WinEunuuchs2Unix
2
Creo que todos tienen cosas diferentes en su .bashrc. Intenta curl wttr.in/Edmonton?0, es asombroso. Úselo curl wttr.in/:helppara obtener ayuda. Tengo una llamada similar en un /etc/update-motd.d/scriptlet, así que me informo al iniciar sesión desde la consola o ssh (no para cada ventana de terminal). Si te gusta, agrégalo --silent --max-time 3a la llamada curl para que no te lleve una eternidad si Internet es lento.
PerlDuck
@PerlDuck The curl wttr.in/Edmonton?0es IMPRESIONANTE! Muchas gracias. Trataré de exprimir eso después de que se toiletmuestre la hora en mi pantalla de bienvenida :)
WinEunuuchs2Unix