ls -l --color=auto | tee output.log
Senza tubo / tee è colorato. Come posso farlo in modo che rimanga colorato durante l'uso tee
(può essere colorato solo sullo schermo, non mi interessa i colori nei registri).
ls -l --color=auto | tee output.log
Senza tubo / tee è colorato. Come posso farlo in modo che rimanga colorato durante l'uso tee
(può essere colorato solo sullo schermo, non mi interessa i colori nei registri).
Risposte:
Basta inserire unbuffer
prima di qualsiasi comando per far credere che stia scrivendo su un output interattivo anche se in realtà esegue il piping in un altro eseguibile. Questo manterrà il colore nel caso di ls
.
Per esempio
unbuffer ls -l --color=auto | tee output.log
Se non lo hai già installato, su Ubuntu e altre distribuzioni Linux Debian puoi installarlo unbuffer
facendo.
sudo apt-get install expect-dev
xcodebuild
- invece ho ottenuto linee tritate senza colore. unbuffer xcodebuild | less -R
ha funzionato perfettamente, tuttavia.
expect-dev
pacchetto. expect
è abbastanza.
Usa l'opzione ls --color=always
--color=auto
non colorerà l'output verso una pipeline - per ovvi motivi.
La pagina principale dice quanto segue:
Con --color = auto, i codici colore vengono emessi solo se l'uscita standard è collegata a un terminale (tty).
ls -l
era solo un esempio. Ho un comando completamente diverso (registri heroku) che rimuove i colori quando viene convogliato tee
. E voglio "riparare / cambiare" tee / pipe, non il comando che sto eseguendo.
ls
. Vedi la mia risposta che risolve il problema per tutti i programmi, inclusi i registri di heroku.
Espanderò la script
soluzione fornita nel commento della risposta accettata. L'uso script
può essere utile nel caso in cui non sia possibile o non si desideri installare il pacchetto prevede che contiene il unbuffer
comando.
Stampa l' ls
output su stdout e file con codici colore :
script -efq output.log -c "ls -l --color=auto"
dove ( 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).
Visualizza il file di output con i colori:
less -r output.log
-e
è uguale a --return
- non è necessario per entrambi; -efq
lo è --return --flush --quiet
.