Se eu usar o bash shell cli e executar algum programa que não retorne imediatamente, insiro algumas letras (basicamente digitando o próximo comando antes de perceber que o anterior não terminou) e a entrada sempre se parece com isso (especialmente ao usar teclas de seta para cima e para baixo :)
]]A^ or ]]B^
E eu me pergunto: esse tipo de entrada prematura é 'prejudicial', ou o que a string retornada significa?
Respostas:
Essas strings são a representação bruta dos caracteres especiais que você digitou (como início, fim, setas, tabulação etc ...).
O efeito nocivo deles é controlado pelo comando que você está executando, se estiver recebendo informações do terminal, esses caracteres farão parte dela.
Se não receber a entrada do terminal, não deverá ter efeitos adversos em nenhum dos sabores do Unix que conheço.
fonte
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[
, eA
).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, quandobash
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 quebash
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 areadline
biblioteca para fazer a maior parte de sua entrada.fonte