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.