caracteres inesperados que precedem nomes de arquivos ao usar LS

caracteres inesperados que precedem nomes de arquivos ao usar LS

Temos um Arduino Yun Rev 2 com extroot configurado por meio do esboço YunDiskExpander em um microSD sandisk de 32 GB particionado para ter 512 MB para o extroot.

Estranhamente, porém, sempre que usamos ls os resultados são precedidos por um [dígito (normalmente 1) e ;mais dois dígitos (normalmente 34) a letra me então obtemos o nome do arquivo ou pasta, que sempre é [manexado a ele. Isso também parece ocorrer em todos os caracteres quando o vim é executado no Arduino.

Estamos acessando-o através do monitor serial disponível publicamente como esboço de terminal. Estes caracteres inesperados estão a dificultar notavelmente o desenvolvimento, pelo que qualquer assistência seria muito apreciada.

Responder1

As coisas que você descreveu são (partes de)sequências de escaperesponsável por alterar a cor de primeiro plano do texto. No meu Debian lspode gerar o seguinte exemplo de saída:

^[[01;34mfoobar^[[0m

onde ^[representa um único caractere: caractere de escape ( 0x1b). Terminais que suportam isso, após receberem tais dados deverão imprimir foobarem azul. Você não mencionou zeros e meus testes indicam que isso ^[[1;34mfoobar^[[mtambém funciona, então provavelmente você lsgera o último formato.

lstenta colorir sua saída, mas parece que os caracteres de escape foram perdidos na transmissão por qualquer motivo ou foram transmitidos corretamente, mas seu terminal os ignora (nem imprime sua representação nem reconhece as sequências de controle a seguir). Na verdade você vê:

[1;34mfoobar[m

Puro lssem opções não deveria usar cores,POSIXnão diz nada sobre cores. Ainda assim, as implementações podem oferecer a opção de colorir a saída e é comum lsser um alias para ls --color=auto. Geralmente isso funciona bem e os usuários podem nem saber que o alias está envolvido. Verifique se este cenário se adequa ao seu caso: invocar alias ls. Presumo que sim.

Soluções possíveis:

  • substituir a opção sob demanda: ls --color=no;
  • ignore o alias sob demanda: command ls;
  • destruir o alias (uma vez por sessão do shell): unalias ls;
  • descubra em qual script de inicialização o alias está definido e exclua a linha relevante ou comente-a; esta é uma solução permanente.

informação relacionada