Como alguma saída de 'cat' pode alterar como os caracteres unicode são interpretados no bash?

2

Esta é uma questão por pura curiosidade:

Eu tenho uma configuração personalizada do PS1 no bash que é apenas o diretório atual, seguido por um lambda em letras minúsculas ( λ ), por exemplo %código%. Eu acidentalmente usei com um arquivo binário, cancelei a saída e subsequentemente tive o cat em dois caracteres japoneses λ para o resto da sessão. Ao colar esse caractere de outro lugar, ele também era exibido como esses dois caracteres japoneses.

Agora, minha pergunta é: como a saída deste arquivo binário alterou como o bash interpreta os caracteres Unicode?

    
por yerforkferchips 07.11.2014 / 23:58

1 resposta

5

my question is, how did the output of this binary file change how bash interprets Unicode characters?

Terminais padrão Unix suportam comandos ANSI / VT-100 que podem controlar os cursores, as cores, e as fontes. Quando você digita um arquivo binário na tela, é provável que alguns dos caracteres binários coincidam acidentalmente com esses códigos de controle e definam as propriedades do seu terminal.

Para retornar seu terminal ao estado padrão, execute:

reset

Exemplos de seqüências de controle do VT-100

Se você quiser que o texto em seu temporário pisque, digite:

echo -e '\E[5m'

Se você quiser mudar a exibição para reverter o vídeo, digite:

echo -e '\E[7m'

Como um exemplo mais complexo, considere o comando make , que pode produzir muitos resultados. Para facilitar a identificação das coisas importantes, convém destacar ERR no vídeo reverso enquanto exibe WARNING em negrito. O código a seguir adiciona as seqüências de controles VT-100 à saída de make para obter este destaque no terminal :

make 2>&1 | sed -e 's/.*\bERR.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bWARN.*/\x1b[1m&\x1b[0m/i'

O acima adiciona sequências de controle intencionalmente. Quando um arquivo binário é digitado na tela, não há como dizer quais sequências de controle do VT-100 serão acidentalmente ativadas.

    
por 08.11.2014 / 00:31

Tags