ls comando do sistema não mostrando as cores dos terminais

2

Eu acabei de brincar com algum código em C, um exemplo de um programa realmente básico é o seguinte, que apenas, obviamente, lista os diretórios usando o comando do sistema ls.

#include <stdio.h>

int main (void) {
    system("ls -l -d */");
    printf("I've just listed the directories :-)\n");
    return 0;
}

Isso roda bem, mas mostra a saída ls em monocromático, enquanto o Bash produziria a lista usando cores para os diretórios (ou arquivos se eu incluísse arquivos). Como posso fazer meu código C usar as cores bash? Obrigado

    
por Braiam 01.06.2014 / 11:38

2 respostas

8

ls é aliased por padrão como: ls --color=auto , então quando ls está em um terminal que suporta cores, ele usa códigos de cores.

Uma chamada de system() não acontece em uma sessão bash para que seus aliases não sejam avaliados. Eu também não tenho certeza do que aconteceria com a detecção automática, então eu faria com que fosse forçada a saída de cores, ligando o comando:

system("ls --color=always -l -d */");

Eu testei isso e funciona. --color=auto também funcionou e isso pode ser mais seguro.

Esse fenômeno pode acontecer mesmo sem estar em uma chamada C system() . Eu já passei por um problema semelhante com watch com outra pessoa . Execute watch ls -l e você não verá cores. Há também uma explicação sobre por que --colour=auto nem sempre funciona.

    
por Oli 01.06.2014 / 12:50
-2

Espero que isso ajude você: link

Etc .: cor azul - \ 033 [0; 34m ("\ 033 [0; 34m" + "Meu texto em azul")

    
por YeeApple 01.06.2014 / 12:20