Algumas notas sobre o comando histórico STTY
para esclarecer algumas imprecisões na outra resposta e comentários associados :
Terminais anteriores como o DEC VT05 ou VT50 e os teleimpressores antes disso apenas suportavam caracteres maiúsculos. O que isso significa é que nenhum caractere em letra minúscula jamais poderia ser inserido a partir deles ou que eles não seriam capazes de exibir qualquer outra letra que não os maiúsculos.
Com o Unix sendo sensível a maiúsculas e a maioria dos comandos sendo minúsculas, você pode ver que há um problema. É por isso que existem modos especiais termio / termios (e que ainda estão lá nos Unices modernos, mesmo que esses terminais tenham ido há muito tempo) para lidar com isso.
termio / termios são respectivamente as interfaces mais antigas e mais recentes para controlar o driver tty no Unix. Em um termio (s) ioctl
, você especifica sinais de entrada, saída, controle ... que especificam como os sinais elétricos em uma linha serial devem ser manipulados em caracteres de entrada e saída e o comportamento interno do driver. echo, o editor de linhas ... A maioria deles se aplica a terminais virtuais, como os modernos consoles Unix VGA ou pseudo-terminais.
A interface da linha de comando para termio(s)
é o comando stty
.
Para manipular os terminais de maiúsculas, há três termio(s)
de sinalizadores envolvidos:
-
IUCLC
(Maiúsculas para minúsculas): os caracteres recebidos são convertidos para minúsculas quando são inseridos. Isso significa que o A
enviado pelo terminal é considerado como a
. Isso significa que, com isso ativado, posso digitar LS
no meu VT50, e o shell lerá ls
de /dev/ttyX
. Eu também posso agora executar o comando stty
.
- Agora, com
IUCLC
sozinho e terminal echo
, enquanto digito LS
, o driver enviava ls
de volta para o terminal (para que eu possa ver o que digito) que ele não pode exibir, então também precisamos de OLCUC
(Minúscula de Saída para Maiúsculas), ou seja, precisamos converter qualquer letra minúscula para maiúscula antes de enviar para o terminal.
- Agora, podemos operar o Unix a partir de um VT50, mas e se quisermos inserir caracteres maiúsculos agora? É aí que entra o sinalizador
xcase
local . Isso permite (somente no modo de entrada canônico) enviar uma maiúscula A
digitando \A
e, na saída, uma maiúscula A
é processado como \A
. (aquele não está implementado no Linux)
O comando stty
tem as configurações iuclc
, olcuc
e xcase
correspondentes e um alias para todos os três: lcase
. A configuração padrão e o que você obtém depois de stty sane
é lcase
off.
Então, quando você está em um VT50, tudo que você precisa fazer é executar:
stty lcase
para poder fazer qualquer coisa. Mas espere, como você faz isso quando só pode enviar letras maiúsculas? É aí que você precisa de um comando STTY
como um alias para stty
, e é por isso que stty
suporta LCASE
como um alias para lcase
.
Não existe tal SANE
alias porque você não quer fazer stty sane
quando seu terminal é todo em maiúsculas.
Se você executar stty lcase
ou stty olcuc
por engano em um terminal normal (experimente em xterm
ou qualquer terminal moderno), é aí que você precisa inserir stty sane
para voltar ao normal. Mas você não precisa de um comando STTY
para isso. Se você digitar stty sane
, irá ver STTY SANE
retornado, mas esse é apenas o texto exibido (não o comando digitado) que terá sido traduzido, ainda é o comando stty sane
que será ser executado.
Esses iuclc
, olcuc
, xcase
flags costumavam ser especificados pelo POSIX (e é provavelmente por isso que ele é implementado no Linux, embora eu duvide seriamente que alguém já conectou qualquer um desses terminais antigos a um sistema Linux ( diferente de diversão)), mas foram removidos no POSIX: 2001.