Borrar una pantalla de terminal de verdad

382

El uso del clearcomando en el terminal solo engaña al usuario al pensar que la pantalla se ha borrado ... aún puede ver la salida de los comandos anteriores cuando se desplaza con el mouse. Esto hace la vida difícil cuando te estás ahogando en un tsunami de texto.

Varias soluciones (código de escape, etc.) que se pueden encontrar en Internet son solo variaciones de lo que ya hace el comando clear.

Entonces, ¿cómo se borra el contenido de un terminal en Linux de verdad?

Autodidacta
fuente
44
Lo categorizaría como "herramientas de software comúnmente utilizadas por los programadores" (mencionadas en las preguntas frecuentes como válidas).
Autodidacta
55
Lo que realmente está preguntando es "¿Cómo puedo borrar el búfer de desplazamiento hacia atrás del terminal?" que es independiente del shell (Bash) o Ubuntu.
Pausado hasta nuevo aviso.
@ spiderplant0 probablemente porque AskUbuntu es el lugar correcto para esto, en este momento. No existía cuando se le preguntó esto, por lo que se cerró como fuera de tema, aunque ese no es el caso.
jcollum
1
Esa es una pregunta más general, que afecta no solo a Ubuntu o bash, como señaló @Dennis. Cambiaría el tema "Borrar la pantalla de bash de Ubuntu de verdad" -> "Borrar una pantalla de terminal de verdad"
Ra_
Hay muchos tipos de terminales diferentes con los que puede ejecutar Bash (el término " terminal bash " no tiene sentido). El "borrado" no se aplica a todos ellos: a veces, la aproximación más cercana es romper el papel y tirar / triturar / quemar / destruir el bit que no desea.
Toby Speight el

Respuestas:

500

Use el siguiente comando para hacer una pantalla clara en lugar de simplemente agregar nuevas líneas ...

printf "\033c"

sí, es un 'printf' en el indicador de bash.

Sin embargo, es probable que desee definir un alias ...

alias cls='printf "\033c"'

Explicación

\033 == \x1B == 27 == ESC

Entonces esto se convierte en <ESC>cel código de escape VT100 para restablecer el terminal. Aquí hay más información sobre los códigos de escape del terminal.

Editar

Aquí hay algunas otras formas de hacerlo ...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

¡Lo anterior no funciona en la consola de KDE (llamada Konsole) pero hay esperanza! Use la siguiente secuencia de comandos para borrar la pantalla y el búfer de desplazamiento hacia atrás ...

clear && echo -en "\e[3J"

O tal vez use el siguiente alias en KDE ...

alias cls='clear && echo -en "\e[3J"'

Obtuve el comando de limpieza de desplazamiento hacia atrás desde aquí .

Autodidacta
fuente
44
Esto es en realidad terminal específico. "\033c"es ESC cla secuencia de escape VT-XXX para "Restablecimiento completo (RIS)". Casi todos los terminales que la gente usa actualmente en estos días son compatibles con VT, pero si alguna vez te encuentras usando un terminal extraño, esto podría no funcionar. Es más probable que la respuesta de @ vpit3833 funcione suponiendo que TERM esté configurado correctamente.
Laurence Gonsalves
2
printfes un Bash incorporado (es cierto que también es un binario separado, pero los incorporados tienen prioridad y la mayoría de los shells modernos tienen printf).
Pausado hasta nuevo aviso.
2
@ SDX2000 OK ... Sé que especificó Ubuntu, y supuse que se comportarían de manera similar en todos los emuladores de terminal "modernos". Inicialmente probé en el terminal de mi MAC y no se reinició allí, pero sí en mi Centos Linux.
nhed
12
echo -en "\ 033c"
Jonathon Reinhart
2
$ 0.02 unos años más tarde, pero soy estudiante en CU. Le pregunté a mi profesor de sistemas operativos y dijo que este era un ejemplo de secuencia de escape ANSI: en.wikipedia.org/wiki/ANSI_escape_code Este es un ejemplo de señalización en banda.
abgordon
216

Tratar reset. Se borra la pantalla del terminal, pero se puede acceder a los comandos anteriores a través de la flecha o la combinación de teclas que tenga.

vpit3833
fuente
3
¡Gracias! Pero borra todo, incluido el aviso. Vea mi respuesta para una solución que no hace esto.
Autodidacta
55
@ SDX2000 Ambos borran la solicitud y luego el shell genera uno nuevo. La única desventaja de reiniciar es que parece ser un poco más lento (probablemente porque hace más que solo emitir ESC c) pero es más portátil.
Laurence Gonsalves
@ Laurence gracias por la aclaración ... Intenté restablecer pero fue tan lento que supuse que el aviso se borró junto con todo lo demás. Todavía preferiré usarlo, ESC cya que probablemente nunca usaré ningún terminal que no sea el que usa Ubuntu. Aunque resetpuede ser útil algún día cuando estoy depurando una máquina remota a través del puerto serie, etc.
Autodidact
1
El restablecimiento de @ SDX2000 también es útil para aquellos casos en los que su terminal se maltrata porque mató algo (o capturó un archivo binario) y dejó su término en un estado destrozado. ¿Alguna vez entró en un estado donde aparece su mensaje pero no cuando escribe, y cuando presiona enter, el nuevo mensaje aparece junto al mensaje anterior en lugar de debajo de él? restablecer arregla eso. En realidad, eso es todo para lo que lo uso ... Nunca he tenido la necesidad / deseo de borrar mi búfer de desplazamiento hacia atrás.
Laurence Gonsalves
44
El retraso de un segundo asociado con resetes insoportable para mí.
Jonathon Reinhart
62
tput reset

Eso hará el truco!

Comunidad
fuente
2
Se ejecuta mucho más rápido que lo normal reset, pero aún así hace el trabajo.
Ponkadoodle
1
Más rápido que solo reset
l2aelba el
Esto no siempre fue suficiente, pero tput clear lo hizo
InterLinked
7

Ninguna de las respuestas que leí funcionó en PuTTY, así que encontré un comentario sobre este artículo :

En la configuración de su conexión, en "Ventana-> Comportamiento" encontrará una configuración "El menú del sistema aparece solo en ALT". Luego, CTRL + L, ALT, l (que es una L minúscula) desplazará la pantalla y luego borrará el búfer de desplazamiento.

(relevante para el OP porque me estoy conectando a un servidor Ubuntu, pero también aparentemente relevante sin importar qué servidor esté ejecutando).

TecBrat
fuente
Un comentario de 3 años de @Dennis Williamson me llevó a esta respuesta.
TecBrat
Además, teniendo en cuenta que en la configuración de "ventana" de la masilla que activó los "aparece en el menú del sistema ALT-Space" que puede hacer rápidamente CTRL+La continuación ALT+Space, Uque borra primero la ventana del terminal entonces se restablece el desplazamiento hacia atrás de verdad.
Pierre Voisin
6

El siguiente enlace explicará cómo hacer que ese alias sea permanente para que no tenga que seguir escribiéndolo.

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

Estos son los pasos detallados en ese enlace.

  1. vim ~ / .bashrc o gedit ~ / .bashrc o cualquier editor de texto que te guste
  2. poner alias cls = 'printf "\ 033c"' al final del archivo
  3. guardar y Salir
  4. . ~ / .bashrc (y sí, debería haber un espacio entre. y ~)
  5. ¡Ahora verifique si todo funcionó!

No me atribuyo crédito por esta información, solo se la paso.

N1mr0d
fuente
4

Mi comando amigable favorito para esto es:

reset

Probado en xterm y VT100. También ayuda después de una terminación anormal del programa. Mantiene el búfer de comandos, por lo que la flecha hacia arriba recorrerá los comandos anteriores.

aplausos: D

elbedoit
fuente
3

Sé que la solución que emplea la impresión de nuevas líneas no es muy compatible, pero si todo lo demás falla, ¿por qué no? Especialmente cuando uno está operando en un entorno en el que es probable que otra persona pueda ver la pantalla, pero no pueda hacer keylog. Entonces, una solución potencial es el siguiente alias:

alias c="printf '\r\n%.0s' {1..50}"

Luego, para "borrar" los contenidos actuales de la pantalla (o más bien, ocultarlos), simplemente escriba c+Enteren el terminal.

nemesisfixx
fuente
2

Solo para agregar que el tmuxbúfer de desplazamiento no se borra con clear, reseto printf. Usted necesita :clear-history. Ver enlace .

theaws.blog
fuente
-2
echo -e "\e[3J"

Esto funciona en máquinas Linux

Nithin
fuente
55
Aunque le agradecemos su respuesta, sería mejor si proporcionara un valor adicional además de las otras respuestas. En este caso, su respuesta no proporciona un valor adicional, ya que otro usuario ya publicó esa solución. Si una respuesta anterior fue útil para usted, debe votarla en lugar de repetir la misma información.
Toby Speight
-53

Compila esta aplicación.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}
Max
fuente
33
Lo siento, pero esta no es la mejor solución. Hay mejores métodos que arrojar 999 líneas nuevas
pbfy0
2
Realmente hay algo de valor en esto. En algunos terminales, limpiar la pantalla con los otros métodos eliminará el historial y no le permitirá desplazarse hacia atrás ... aunque con 999 líneas mi dedo se cansaría. Pobre tipo.
JoshuaDavid el
@JoshuaDavid El punto central de la pregunta era que OP no quería poder desplazarse hacia atrás después de borrar.
Socowi
@Socowi Mi comentario se dirigía a esta -50 respuesta mal calificada, no al OP. ¡Pero estás en lo correcto!
JoshuaDavid