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).
Simplesmente insira unbufferantes 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 unbufferfazendo isso.
Isso faz com que o arquivo resultante contenha códigos de cores (é claro); existe alguma maneira de imprimir o arquivo de uma maneira que faça uso dos códigos de cores e exiba adequadamente as cores no terminal?
Kyle Strand
2
Ugh, isso faz com que as entradas de senha mostrem sua senha em texto não criptografado!
AndiDog 20/08/2015
@Tgr Essa solução não funcionou para mim no OS X tentando obter a saída de cores brutas xcodebuild- em vez disso, recebi linhas cortadas sem cor. unbuffer xcodebuild | less -Rfuncionou perfeitamente, no entanto.
Slipp D. Thompson
2
Você não precisa do expect-devpacote. expectbasta.
Yajo 4/09/18
11
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).
ESTÁ BEM. Isso explica tudo. Mas ainda posso ver as cores na tela? (É um TTY, afinal). Não me importo de NÃO tê-los no arquivo de log, mas certamente os quero na minha tela.
Paweł Gościcki 2/11
Eu acho que não me deixei claro o suficiente. ls -lfoi 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.
Paweł Gościcki 2/11
1
@Pawel, você não pode consertá-lo facilmente no tee / pipe, pois o tee / pipe não está removendo esses códigos de cores. O problema é que o comando inicial vê que não está gravando no terminal. Você precisa de um pseudo-terminal que atue como um tubo, mas que comandos vêem como um terminal.
RedGrittyBrick #
Hum ... justo o suficiente. Acho que só preciso aceitar que é assim.
Paweł Gościcki 3/11
3
@ PawełGościcki esta resposta apenas resolve o problema ls. Veja minha resposta que corrige o problema para todos os programas, incluindo os logs heroku.
Eamonn O'Brien-Strain
3
Expandirei a scriptsolução dada no comentário da resposta aceita. O uso scriptpode ser útil caso você não possa ou não queira instalar o pacote expectável que contém o unbuffercomando.
Imprima als 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).
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 dels
.Por exemplo
Se você ainda não o instalou, no Ubuntu e em outras distribuições Linux Debian você pode instalar
unbuffer
fazendo isso.fonte
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:
fonte
ls -l
foi apenas um exemplo. Eu tenho um comando completamente diferente (registros heroku) que retira cores quando canalizadastee
. 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 usoscript
pode ser útil caso você não possa ou não queira instalar o pacote expectável que contém ounbuffer
comando.Imprima a
ls
saída em stdout e arquive com códigos de cores :onde (
man script
):Veja o arquivo de saída com cores:
fonte
-e
é o mesmo que--return
- não há necessidade de ambos;-efq
é--return --flush --quiet
.