Recientemente estaba tratando de aprender más sobre cómo funciona el shell y estaba viendo cómo funciona el clear
comando. El ejecutable se encuentra /usr/bin/clear
y parece imprimir un montón de líneas en blanco (igual a la altura del terminal) y coloca el cursor en la esquina superior izquierda del terminal.
La salida del comando es siempre la misma, independientemente del tamaño del terminal:
$ clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
y se puede replicar con el eco que tiene exactamente el mismo efecto:
$ /bin/echo -e "\x1b\x5b\x48\x1b\x5b\x32\x4a\c"
Tenía mucha curiosidad por cómo esta salida de este comando se traduce en limpiar la consola.
stty -a
Respuestas:
El resultado del
clear
comando son los códigos de escape de la consola. Los códigos exactos requeridos dependen del terminal exacto que esté utilizando, sin embargo, la mayoría usa secuencias de control ANSI. Aquí hay un buen enlace que explica los diversos códigos: http://www.termsys.demon.co.uk/vtansi.htm . Los fragmentos relevantes son:Y:
Donde
<ESC>
es hexadecimal1B
u octal033
. Otra forma de ver los personajes es con:fuente
Funciona emitiendo ciertas secuencias de escape ANSI . Específicamente, estos dos:
Esto es quizás más fácil de entender en la salida de
od -c
:033
es decirEsc
, el resultado anterior es simpleEsc[H
y luegoEsc[2J
.fuente
El resultado enviado por clear (1) depende de su tipo de terminal, definido por $ TERM en el entorno de shell. Hace lo mismo que el comando "tput clear", que busca el código de escape para el tipo de terminal actual y envía esa cadena a la salida estándar.
El terminal que recibe el código de escape de clear / tput lo interpreta y ejecuta el comando enviado, como borrar la pantalla local. "terminal" significa la consola local o una sesión de terminal (masilla, xterm, etc.), posiblemente a través de ssh o telnet.
fuente
Me sorprende que otras respuestas no hayan mencionado TERMINFO (o TERMCAP)
Usa las páginas de manual de Luke
man clear
dice ...TÉRMINO
El
clear
comando solo usa secuencias de escape ANSI si$TERM
está configurado en ANSI o algún tipo de terminal basado en ANSI como XTERM.INFOCMP
Puedes usar
infocmp
para investigarTPUT
O puede usar
tput
para ver una capacidadfuente
Además de todas las respuestas bonitas anteriores, podemos hacer algunos pasos para ver qué sucede:
Puedes ver, dos comandos proporcionan lo mismo
ANSI escape sequences
.fuente
En primer lugar, / bin / echo -e "\ x1b \ x5b \ x48 \ x1b \ x5b \ x32 \ x4a \ c" en realidad no borra la pantalla. Puede desplazarse hacia arriba para ver los contenidos anteriores.
En segundo lugar, abrí IRB (que es un shell Ruby interactivo) y escribí:
O
p %x(clear)
O:
Todos los códigos deben regresar
"\e[3J\e[H\e[2J"
Ahora abra su terminal, escriba
echo -e "\e[3J\e[H\e[2J"
Debería borrar la pantalla. Estas se llaman secuencias de escape ANSI:
https://en.wikipedia.org/wiki/ANSI_escape_code
¡Puede usar estos códigos para parpadear un texto (
\e[5m
), colorear un texto: (for i in {0..255} ; do printf "\e[38;5;${i}m${i} " ; done ; echo
) y muchas otras cosas!fuente