ls -l --color=auto | tee output.log
Sans pipe / té c'est coloré. Comment puis-je faire pour qu'il reste coloré lors de l'utilisation tee
(ne peut être coloré que sur l'écran, je ne me soucie pas des couleurs dans les journaux).
ls -l --color=auto | tee output.log
Sans pipe / té c'est coloré. Comment puis-je faire pour qu'il reste coloré lors de l'utilisation tee
(ne peut être coloré que sur l'écran, je ne me soucie pas des couleurs dans les journaux).
Réponses:
Il suffit d’insérer unbuffer
avant toute commande pour lui faire croire qu’elle écrit sur une sortie interactive, même si elle 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é, vous pouvez l'installer unbuffer
avec Ubuntu et d'autres distributions Linux Debian .
sudo apt-get install expect-dev
xcodebuild
- au lieu de cela, j'ai eu des lignes hachées sans couleur. unbuffer xcodebuild | less -R
travaillé parfaitement, cependant.
expect-dev
paquet. expect
est assez.
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).
ls -l
était juste un exemple. J'ai une commande complètement différente (journaux Heroku) qui supprime les couleurs lors du transfert tee
. Et je veux "réparer / changer" le tee / pipe, pas la commande que j'exécute.
ls
. Voir ma réponse qui résout le problème pour tous les programmes, y compris les journaux Heroku.
J'élargirai la script
solution donnée dans le commentaire de la réponse acceptée. Utiliser script
peut être utile si vous ne pouvez pas ou ne voulez pas installer le paquet attendu contenant la unbuffer
commande.
Imprimer la ls
sortie sur stdout et classer avec les 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).
Voir le fichier de sortie avec les couleurs:
less -r output.log
-e
est la même chose que --return
- pas besoin des deux; -efq
est --return --flush --quiet
.