Basta inserir unbuffer
antes de qualquer comando para fazê-lo pensar que está gravando em uma saída interativa, mesmo que esteja realmente inserindo em outro executável. Isso preservará a cor no caso de ls
.
Por exemplo
unbuffer ls -l --color=auto | tee output.log
Se você ainda não o instalou, no Ubuntu e em outras distribuições Linux do Debian você pode instalar unbuffer
fazendo.
sudo apt-get install expect-dev