Recentemente, eu estava tentando aprender mais sobre como o shell funciona e estava olhando como o clear
comando funciona. O executável está localizado /usr/bin/clear
e parece imprimir várias linhas em branco (iguais à altura do terminal) e coloca o cursor na parte superior esquerda do terminal.
A saída do comando é sempre a mesma, independentemente do tamanho do terminal:
$ clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
e pode ser replicado com o eco que tem exatamente o mesmo efeito:
$ /bin/echo -e "\x1b\x5b\x48\x1b\x5b\x32\x4a\c"
Fiquei realmente curioso como essa saída desse comando se traduz na limpeza do console.
stty -a
Respostas:
A saída do
clear
comando são códigos de escape do console. Os códigos exatos necessários dependem do terminal exato que você está usando, mas a maioria usa seqüências de controle ANSI. Aqui está um bom link explicando os vários códigos - http://www.termsys.demon.co.uk/vtansi.htm . Os trechos relevantes são:E:
Onde
<ESC>
é hexadecimal1B
ou octal033
. Outra maneira de visualizar os personagens é com:fonte
Ele funciona emitindo determinadas seqüências de escape ANSI . Especificamente, esses dois:
Talvez seja mais fácil entender o resultado de
od -c
:033
éEsc
, então a saída acima é simplesEsc[H
e entãoEsc[2J
.fonte
A saída enviada por clear (1) depende do seu tipo de terminal, definido por $ TERM no ambiente do shell. Ele faz o mesmo que o comando "tput clear", que procura o código de escape do tipo de terminal atual e envia essa string para a saída padrão.
O terminal que recebe o código de escape de clear / tput o interpreta e executa o comando enviado, como limpar a exibição local. "terminal" significa o console local ou uma sessão de terminal (putty, xterm, etc.), possivelmente via ssh ou telnet.
fonte
Estou surpreso que outras respostas não tenham mencionado TERMINFO (ou TERMCAP)
Use as páginas de manual Luke
man clear
diz ...PRAZO
O
clear
comando usa apenas seqüências de escape ANSI se você$TERM
estiver definido como ANSI ou algum tipo de terminal baseado em ANSI, como XTERM.INFOCMP
Você pode usar
infocmp
para investigarTPUT
Ou você pode usar
tput
para visualizar um recursofonte
Além de todas as respostas legais acima, podemos fazer uma análise para ver o que acontece:
Você pode ver, dois comandos fornecem o mesmo
ANSI escape sequences
.fonte
Primeiramente, / bin / echo -e "\ x1b \ x5b \ x48 \ x1b \ x5b \ x32 \ x4a \ c" não limpa a tela. Você pode rolar para cima para ver o conteúdo anterior.
Em segundo lugar, abri o IRB (que é um shell Ruby interativo) e digitei:
Ou
p %x(clear)
Ou:
Todos os códigos devem retornar
"\e[3J\e[H\e[2J"
Agora abra seu terminal, digite
echo -e "\e[3J\e[H\e[2J"
Deve limpar a tela. Eles são chamados de seqüências de escape ANSI:
https://en.wikipedia.org/wiki/ANSI_escape_code
Você pode usar esses códigos para piscar um texto (
\e[5m
), colorir um texto: (for i in {0..255} ; do printf "\e[38;5;${i}m${i} " ; done ; echo
) e muitas outras coisas!fonte