Algumas teclas do teclado não correspondem a caracteres reais. Por exemplo, Acorresponde ao caractere, a
mas as teclas Upe F1não têm seus próprios caracteres dedicados. Quando essas teclas especiais são pressionadas, em vez de obter um único caractere correspondente à tecla, o terminal converte o pressionamento de tecla em uma sequência especial de vários caracteres que normalmente começam com o caractere de escape (geralmente exibido como ^[
). Por exemplo, Upgeralmente gera a sequência ^[[A
(são 3 caracteres de uma tecla: escape [
, e A
).
O motivo pelo qual você normalmente não vê ^[[A
é porque a maioria dos aplicativos de console é inteligente o suficiente para converter as seqüências especiais em comandos úteis, em vez de apenas repeti-las no console. Para fazer isso, eles desligam o eco interno do terminal e fazem seu próprio processamento de nível inferior. Por exemplo, quando bash
vê ^[[A
, real percebe que significa que você pressionou Upe, em vez de ^[[A
voltar, faz um monte de coisas para excluir o que você digitou até agora, buscar o comando anterior salvo no histórico e imprimi-lo.
Se você vir ^[[A
pressionando Up, isso normalmente significa que o eco do terminal está ativado e o processo em primeiro plano (aquele que está no controle do terminal) não está executando nenhum dos processos especiais mencionados acima. Isso pode ocorrer porque o aplicativo simplesmente ignora o terminal (como a maioria dos comandos não interativos). Observe que, normalmente, o shell coloca o terminal no modo canônico e ativa o eco antes de executar um processo em primeiro plano, e restaura suas próprias configurações assim que recupera o controle do terminal após a saída do comando.
O eco parece bastante inofensivo. Lembre-se de que, se o comando em execução não for lido no terminal, os caracteres que você gerou através do teclado provavelmente terminarão na bash
fila de entrada, portanto, tenha cuidado com o que você digita, pois provavelmente serão interpretados como comandos normais, uma vez que bash
retomam a leitura do terminal.
Actually Na verdade, isso é uma simplificação excessiva. Como a sequência específica pode variar de acordo com o tipo de terminal, normalmente existem várias camadas de bibliotecas de abstração entre um aplicativo de console e o próprio terminal. Por exemplo, bash
usa a readline
biblioteca para fazer a maior parte de sua entrada.