ls -l --color=auto | tee output.log
Sans pipe/té c'est coloré. Comment puis-je faire en sorte qu'il reste coloré lors de l'utilisation de tee
(peut être coloré uniquement à l'écran, les couleurs dans les journaux ne me dérangent pas).
Insérez simplement unbuffer
avant toute commande pour lui faire croire qu'il écrit sur une sortie interactive, même si celle-ci est en train de se raccorder à un autre exécutable. Cela préservera la couleur dans le cas de ls
.
Par exemple
unbuffer ls -l --color=auto | tee output.log
Si vous ne l'avez pas déjà installé, sur Ubuntu et d'autres distributions Linux Debian-ish, vous pouvez installer unbuffer
en le faisant.
Sudo apt-get install expect-dev
Utilisez l'option ls --color=always
--color=auto
ne colorera pas la sortie vers un pipeline - pour des raisons évidentes.
La page principale dit ce qui suit:
Avec --color = auto, les codes de couleur ne sont émis que si la sortie standard est connectée à un terminal (tty).
J'élargirai la solution script
donnée dans le commentaire de la réponse acceptée. Utiliser script
peut être utile si vous ne pouvez ou ne voulez pas installer le package expect contenant la commande unbuffer
.
Imprimer ls
sortie sur stdout et fichier avec codes de couleur :
script -efq output.log -c "ls -l --color=auto"
où (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).
Afficher le fichier de sortie avec les couleurs:
less -r output.log