Os terminais são controlados por sequências de escape enviadas em linha com os dados de caracteres a serem exibidos. É assim que, por exemplo, echo -e '\e[34m'
transformará o texto em muitos terminais em azul. Ele está ecoando alguns caracteres para o terminal - eles são uma seqüência de escape que define a cor do primeiro plano.
O terminal ficou bagunçado ao ser instruído a mudar para algum conjunto de caracteres alternativos (e possivelmente mais coisas). Ele fez isso porque /var/log/wtmp
continha as seqüências de escape usadas para alternar conjuntos de caracteres. Tecnicamente, não é realmente confuso - está operando exatamente como foi projetado. (Tente tput smacs
para atrapalhar o seu terminal sob demanda; tput rmacs
para alterar esse parâmetro de volta.)
reset
, etc. funcionam enviando seqüências de escape redefinindo vários parâmetros para seus padrões. Isso "consertou" o terminal.
Esse truque head /bin/ls
está funcionando porque seu /bin/ls
(ou pelo menos a parte impressa por head
) contém uma sequência de escape que altera os parâmetros do terminal novamente. Isso não é de todo portátil - ele não funciona aqui, por exemplo - e provavelmente faz um trabalho muito menos minúsculo redefinindo padrões do que reset
, etc.)