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


Esta é uma questão de pura curiosidade:

Eu tenho uma configuração personalizada PS1 no bash que é apenas o diretório atual, seguido por um lambda em letras minúsculas (λ), por exemplo. . Eu usei acidentalmente cat com um arquivo binário, cancelou a saída e subsequentemente teve λ se transformar 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 desse arquivo binário mudou como o bash interpreta os caracteres Unicode?


2


origem




Respostas:


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

Suporte para terminais Unix padrão Comandos ANSI / VT-100 que pode 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 seu estado padrão, execute:

reset

Exemplos de sequê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 tela para reverter o vídeo, digite:

echo -e '\E[7m'

Como um exemplo mais complexo, considere o make comando que pode produzir muita saída. Para facilitar a identificação das coisas importantes, talvez você queira destacar ERR em vídeo reverso ao exibir WARNING em negrito. o código seguinte adiciona seqüências VT-100 controles para a 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.


5



Eu assumi que tinha algo a ver com sequências de controle, mas não consigo encontrar nenhuma sequência de controle que altere a representação de caracteres Unicode, também não na listagem que você vinculou. - yerforkferchips
Existem muitos comandos para alterar conjuntos de caracteres. Como um exemplo, ESC ( 0 e ESC ) 0 defina "Special Graphics Character Set". Mais sobre códigos de controle para definir conjuntos de caracteres podem ser encontrados Aqui. Eu suspeito que seria preciso bastante escavação através de definições de fonte e arquivos de configuração para determinar qual dessas seqüências resulta em seu sistema exibindo um lambda como um caractere japonês. - John1024