Como obter o gcc como um canal para mostrar corretamente as cores no terminal

2

Estou compilando um arquivo com o gcc (na verdade, estou fazendo, mas não importa), que envia algumas mensagens de erro coloridas para o stderr. Então, eu faço:

gcc a.c 2>&1 | less

mas o que eu recebo são linhas como:

a.c: In function <E2><80><98>whatever(int)<E2><80><99>:
a.c:11:10: warning: etc etc

isto é, vejo os códigos de escape numéricos em vez das cores.

Eu tentei seguir o conselho em esta resposta na SU, mas não funcionou para mim. Ou melhor, ls --color | less funciona, mas não meu comando gcc acima. O que devo fazer?

Notas:

  • Estou conectado a esta máquina via SSH, com TERM=xterm-256color
  • Sem percorrer less , obtenho as cores no terminal.
por einpoklum 07.10.2016 / 14:49

1 resposta

7

Como uma resposta conforme solicitado.

Existem dois problemas aqui:

  • Por padrão, gcc imprime códigos de cores somente quando a saída é um terminal.
  • Por padrão, less não envia caracteres de cor bruta para o terminal.

Você pode forçar o gcc a imprimir códigos de cores passando a opção -fdiagnostics-color=always . Tenha em atenção que isto irá quebrar várias ferramentas que dependem da análise de erros do compilador.

Você pode forçar o less a enviar códigos de cores para o terminal, passando as opções -r ou -R . Este último é mais seguro, uma vez que só permite códigos para cores ANSI reais.

Resumindo:

gcc -fdiagnostics-color=always a.c 2>&1 | less -R
    
por 07.10.2016 / 15:44