¿Qué comandos puedo usar para restablecer y borrar mi terminal?

64

He estado usando el comando:

reset

para limpiar mi terminal Aunque estoy bastante seguro de que esto no es lo que debería estar haciendo. Restablecer, como su nombre lo indica, restablece todo su terminal (cambia muchas cosas). Esto es lo que quiero:

Básicamente quiero usar el comando clear. Sin embargo, si despejas y luego te desplazas hacia arriba, aún obtienes toneladas de cosas de antes. En general, esto no es un problema, pero estoy viendo registros brutos que son largos y quiero asegurarme de que solo estoy viendo el más reciente. Sé que podría usar moreo algo así, pero prefiero este enfoque.

Sixtyfootersdude
fuente
parece haber mucha confusión sobre lo que se pregunta exactamente aquí. ¿Puedes aclarar la pregunta? ¿Qué es exactamente lo que estás tratando de lograr, limpiando el búfer de desplazamiento de tu terminal? (si es así, ¿qué aplicación de terminal está utilizando?)
quack quixote
1
Ctrl-L borrará la pantalla en bash (en modo emacs, que es el valor predeterminado), similar a ejecutar el programa clear.
Acabo de probar esto en el terminal bash en IntelliJ IDE. Funciona bien y borra el desplazamiento hacia atrás, que es exactamente lo que quería. Gracias.
Ian Lewis
Sé que esto ha sido respondido a muerte, pero creo que lo que quieres es clear && printf '\033[3J'. Sin reinicio de terminal, solo borrando el texto en la pantalla. Ver este post: superuser.com/questions/555554/...
jwd

Respuestas:

57

El búfer de desplazamiento hacia atrás no es una característica de bash sino del programa del terminal. No dijiste qué terminal estás usando.

Si está utilizando xterm, puede borrar las líneas guardadas haciendo eco de ESC-c en el terminal.

Esto puede o no funcionar en cualquier programa de terminal que esté utilizando.

En Linux, esto probablemente funcionará:

echo -e '\0033\0143'

en FreeBSD echo no acepta -e para que pueda probar:

printf '\033\143'
Craig
fuente
Estoy usando xterm. Sin embargo, no entiendo lo que quieres decir. ¿Debo escribir alfabetizado echo ESC-c?
sixtyfootersdude
2
@sixtyfootersdude: No, no es un literal ESC. Lea los artículos "Carácter de escape" y "Carácter de control" en Wikipedia: a ESCmenudo se usa para denotar el carácter ASCII 0x1B, que puede insertar presionando ^Vseguido de Esc.
Grawity
1
No deberías Si su solución implica escribir secuencias de escape de terminal sin procesar, debe repensar la solución. Usaría "menos" en lugar de gato. Si realmente quieres aprender sobre "secuencias de escape de terminal", Google puede ayudarte.
Craig
2
@HaraldNordgren es mejor usar el printf más estándar que echo -e.
Buena persona
3
¿Por qué en \0143lugar de c?
ruakh
51

Use la herramienta adecuada para cada trabajo:

  • Use clearpara borrar la ventana de terminal.

  • Utilícelo resetpara restablecer su terminal cuando las secuencias de control lo estropeen.

  • Úselo catsolo cuando desee transmitir una gran cantidad de datos de un lugar a otro sin interrupciones .

  • Use un programa de buscapersonas como lesso mostpara ver las páginas de salida.

  • Use tail -f /var/log/foo.log /var/log/bar.logpara ver varios archivos de registro diferentes.

    • Con GNU tail, la -Fopción es mejor porque puede continuar siguiendo el archivo incluso cuando aparece un nuevo archivo en su lugar, como es común para los archivos de registro.
nariz grande
fuente
14
Esto realmente no responde a mi pregunta.
sixtyfootersdude
77
Sí lo hace. No archivos cat para leerlos, archivos cat para concatenarlos. Use menos o más para leer archivos, entonces no tiene el mismo problema.
Rich Bradshaw
Busque "uso inútil del gato"
galois
Muchas personas se oponen al uso de catleer cualquier cosa, pero para archivos pequeños realmente tiene mucho sentido para catellos en lugar de usar less. Una vez que el archivo se ha volcado al terminal, puede mirar / desplazarse al archivo con la frecuencia que desee, en lugar de tener que descartarlo lessantes de hacer cualquier otra cosa.
GKFX
23

Solo para proporcionar la respuesta técnica: resetreinicializar el terminal, como si se volviera a abrir desde cero. stty sanehará mucha de la misma funcionalidad (sin el reinicio). Esto es lo mismo que ^L(Ctrl + L) (irrc), y tput clear. A pesar de lo que dijo el póster anterior (@grawity), clearno genera un montón de nuevas líneas. Envía el TERMrestablecimiento de s como se define en terminfoo termcap, para mí, usar gnome-terminal(xterm) es lo mismo que el comando perl -e'print "\33[H\33[2J"'.

Si solo desea borrar el búfer, en comparación con reiniciar todo el terminal, intente esto tput reset. Se debe ser muy rápido, y hacer lo que quiera. (Aunque realmente deberías estar leyendo archivos con less)

tput reset, envía el valor de terminfo para restablecer: en mi terminal (xterm) es lo mismo que perl -e'print "\33c"'

Evan Carroll
fuente
1
Yo no digo clearsalidas de un montón de nuevas líneas. Acabo de proporcionar un comando como alternativa , porque clearsolo borra la pantalla pero no el búfer de desplazamiento. (No en PuTTY o Konsole, al menos.)
Grawity
1
Por esa misma razón, imprimir un montón de nuevas líneas no es realmente una alternativa para borrar: no tiene idea de lo que hará el terminal con la señal clara. Es mejor decirles a las personas nuevas que tiene una base de datos que sabe cómo manejar su terminal, tiene dos valores clave, uno que se asigna clearcomo un nombre de señal a una señal y otro que se asigna reseta una señal, y solo el último da como resultado un búfer de desplazamiento hacia atrás despejado. resetenvía el último, arriba haciendo otras cosas divertidas.
Evan Carroll
1
De acuerdo con la pregunta original de sixtyfootersdude, clearno no restablecer su desplazamiento hacia atrás. ( ESC cfunciona xtermy está basado en VTE, pero no en PuTTY y Konsole). Tampoco quiere usarlo reset, ya que restablece más de lo que quiere. (No sé qué terminal usa, pero compare sttyantes y después de reiniciar)
Grawity
2
Como dije, probablemente él quiera tput reset, lo que envía la señal de reinicio al terminal, sin reiniciar el término. "reset: en lugar de colocar cadenas de inicialización, las cadenas de reinicio del terminal se emitirán si están presentes (rs1, rs2, rs3, rf). Si las cadenas de reinicio no están presentes, pero las cadenas de inicialización sí, se emitirán las cadenas de inicialización. De lo contrario, reset actúa de manera idéntica a init ". Aquí, tenemos cadenas de reinicio para que las cadenas de inicio no se ejecuten.
Evan Carroll
+1: para la sugerencia, sin embargo, tput resetes bastante lento (igual que reset). printf '\033\143'Es mucho más rápido. ¿Hay alguna razón por la cual el método printf es peligroso / malo?
sixtyfootersdude
9

Otra terminal es iTerm2, y tiene una secuencia de escape algo extraña que se usa para borrar el desplazamiento hacia atrás. En un shell Bash, uso algo como:

echo -ne '\033]50;ClearScrollback\a'

en un guion Básicamente, es un carácter ESC, seguido de " ]50;ClearScrollback" y luego un carácter BEL.

Sam Mason
fuente
1
CMD + K funciona en iTerm2. CTRL + K funciona en muchos otros.
blockloop
Me gusta esta solución porque me permitió borrar el búfer de retroceso iTerm2 de un script de shell, cuando las cosas gustaban cleary resetno. Sin embargo, esta no es realmente la mejor respuesta a la pregunta. Creo que la respuesta correcta para ese caso es lo que ofrece la aplicación de terminal, como command-K en iTerm2, control-K en otros, etc.
LS
8

Probablemente la mejor manera de borrar todo es usar la función del terminal:

  • Konsole: Ctrl+ Shift+ KVer → Borrar desplazamiento hacia atrás y restablecer
  • Terminal GNOME: Editar → Restablecer y borrar
  • PUTTY: Ctrl+ right-click→ Clear Scrollback

De esta forma, ambas memorias intermedias se limpian y el estado del terminal se restablece exactamente a lo que era en el inicio (que puede o no ser lo mismo que usar reset).

Gravedad
fuente
Hmm, no tengo eso debajo de mi gnomo ...
sixtyfootersdude
@sixtyfootersdude: Estoy seguro de que está allí, simplemente no sé el menú exacto (no puedo usarlo gnome-terminalen este momento) ... Echa un vistazo a "Herramientas" y otros menús.
Grawity
En xterm su botón ctrl-middle -> "restablecer y borrar líneas guardadas"
Craig
3
menos -W + F foo.log

+Fes para "seguir", similar a tail -fpero también te permite desplazarte hacia atrás.

Todos los terminales basados ​​en vte (GNOME, Xfce, Roxterm) y KDE Konsole le permiten usar la rueda de desplazamiento para desplazarse dentro less. Me parece bastante conveniente.


Alternativa a clear:

perl -e 'print "\ n" x512;'

xterm -e 'tail -f foo.log'
Gravedad
fuente
3

En Mac OS X Terminal.app:

Ver -> Borrar desplazamiento hacia atrás (o command- K)

acajaja
fuente
@Rohit Si la pregunta era específicamente sobre Mac OS X Terminal.app, entonces, sí, esta es una gran respuesta. Sin embargo, la pregunta original es ambigua, lo mejor que puedo decir, con respecto a qué terminal y sistema operativo están en juego.
David J.
2

No es un problema de "Bash". Depende de la terminal que use. Por ejemplo, uso "iterm2" con macbook para conectar una máquina Linux remota. Puede usar "comando + K" para limpiar el búfer, o en el menú, elija "Editar" -> "Borrar búfer".

Steven Huang
fuente
1

Para borrar la pantalla de la consola y el búfer de desplazamiento hacia atrás cuando se ejecuta PuTTY, esto funciona para mí:

echo -en "\ec\e[3J"

En realidad, se trata de 2 secuencias "Esc" que actúan de forma independiente ... se pueden usar en cualquier orden:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

El uso de echo -en "\ec"que restablece el terminal puede cambiar algunas de sus otras configuraciones de terminal. En lugar de "Restablecer", puede hacer esto:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

Puede poner esto en un script de shell y funciona bien.


En caso de que haya algunas dependencias del sistema:

Estoy usando PuTTY Connection Manager (Versión 0.7.1 BETA (compilación 136)), con PuTTY (Versión 0.60).

Mecanografía:

echo \"$TERM\"; /bin/sh --version

informes:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...
Kevin Fegan
fuente
1

Para limpiar el búfer de pantalla para el hardware TTY en FreeBSD, puede usar "vidcontrol - control de consola del sistema y utilidad de configuración" con el parámetro -C Borrar el búfer de historial.

vidcontrol -C

el comando dejará en blanco todo el búfer de pantalla para la consola actual, por encima de lo que ves en este momento. Es posible que desee "borrar" primero, o no, depende de usted.

usuario
fuente
0

Si desea asegurarse de que está viendo las entradas más recientes en un archivo de registro, probablemente sea mejor usar tail en lugar de clear/ catque supongo que está usando.

Josh K
fuente
En realidad, estoy usando tail -f (registros continuos), sin embargo, debido a que ocasionalmente escupen miles de líneas, es importante tener un desplazamiento hacia atrás. Sin embargo, sería bueno saber que no estoy volviendo a un registro anterior.
sixtyfootersdude
0

Hmmm Supongo que si estás ejecutando Konsole, no tienes suerte. Solía ​​ser que simplemente podía "borrar el desplazamiento hacia atrás". Konsole ya no te dejará hacer eso. También debe restablecerlo, por lo que elimina cualquier programa que esté ejecutando. Supongo que necesito un nuevo programa de terminal ......

Bruce
fuente