ls -l --color=auto | tee output.log
Sem pipe / tee é colorido. Como posso fazê-lo para que fique colorido durante o uso tee
(pode ser colorido apenas na tela, não me importo com cores nos logs).
ls -l --color=auto | tee output.log
Sem pipe / tee é colorido. Como posso fazê-lo para que fique colorido durante o uso tee
(pode ser colorido apenas na tela, não me importo com cores nos logs).
Respostas:
Simplesmente insira unbuffer
antes de qualquer comando para fazê-lo pensar que está gravando em uma saída interativa, mesmo que esteja realmente canalizando para 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 Debian você pode instalar unbuffer
fazendo isso.
sudo apt-get install expect-dev
xcodebuild
- em vez disso, recebi linhas cortadas sem cor. unbuffer xcodebuild | less -R
funcionou perfeitamente, no entanto.
expect-dev
pacote. expect
basta.
Use a opção ls --color=always
--color=auto
não colorirá a saída em um pipeline - por razões óbvias.
A página principal diz o seguinte:
Com --color = auto, os códigos de cores são emitidos apenas se a saída padrão estiver conectada a um terminal (tty).
ls -l
foi apenas um exemplo. Eu tenho um comando completamente diferente (registros heroku) que retira cores quando canalizadas tee
. E eu quero "consertar / alterar" tee / pipe, não o comando que estou executando.
ls
. Veja minha resposta que corrige o problema para todos os programas, incluindo os logs heroku.
Expandirei a script
solução dada no comentário da resposta aceita. O uso script
pode ser útil caso você não possa ou não queira instalar o pacote expectável que contém o unbuffer
comando.
Imprima a ls
saída em stdout e arquive com códigos de cores :
script -efq output.log -c "ls -l --color=auto"
onde ( man script
):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
Veja o arquivo de saída com cores:
less -r output.log
-e
é o mesmo que --return
- não há necessidade de ambos; -efq
é --return --flush --quiet
.