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).
Il suffit d’insérer unbufferavant 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 unbufferavec Ubuntu et d'autres distributions Linux Debian .
Cela fait que le fichier résultant contient des codes de couleur (bien sûr); existe-t-il un moyen d' imprimer le fichier de manière à utiliser les codes de couleur et à afficher correctement les couleurs dans le terminal?
Kyle Strand
2
Ugh, cela rend les entrées de mot de passe montrent votre mot de passe en texte clair!
AndiDog
@Tgr Cette solution n'a pas fonctionné pour moi sur OS X en essayant d'obtenir la sortie couleur brute de xcodebuild- au lieu de cela, j'ai eu des lignes hachées sans couleur. unbuffer xcodebuild | less -Rtravaillé parfaitement, cependant.
Slipp D. Thompson
2
Vous n'avez pas besoin du expect-devpaquet. expectest assez.
Yajo
11
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).
D'ACCORD. Ceci explique cela. Mais puis-je quand même voir les couleurs à l'écran? (C'est un ATS après tout). Cela ne me dérange pas de ne pas les avoir dans le fichier journal, mais je les veux sûrement sur mon écran.
Paweł Gościcki
Je pense que je me suis fait pas assez clair. 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.
Paweł Gościcki
1
@Pawel, vous ne pouvez pas le réparer facilement dans un tee / pipe car les tee / pipes ne suppriment pas ces codes de couleur. Le problème est que la commande initiale voit qu'il n'écrit pas sur le terminal. Vous avez besoin d'un pseudo-terminal qui agit comme un canal mais que les commandes voient comme un terminal.
RedGrittyBrick
Hm ... assez bien. Je suppose que je dois juste accepter que c'est comme ça.
Paweł Gościcki
3
@ PawełGościcki cette réponse ne résout que le problème ls. Voir ma réponse qui résout le problème pour tous les programmes, y compris les journaux Heroku.
Eamonn O'Brien-Strain
3
J'élargirai la scriptsolution donnée dans le commentaire de la réponse acceptée. Utiliser scriptpeut être utile si vous ne pouvez pas ou ne voulez pas installer le paquet attendu contenant la unbuffercommande.
Imprimer lals 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).
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 dels
.Par exemple
Si vous ne l'avez pas déjà installé, vous pouvez l'installer
unbuffer
avec Ubuntu et d'autres distributions Linux Debian .la source
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:
la source
ls -l
était juste un exemple. J'ai une commande complètement différente (journaux Heroku) qui supprime les couleurs lors du transferttee
. 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. Utiliserscript
peut être utile si vous ne pouvez pas ou ne voulez pas installer le paquet attendu contenant launbuffer
commande.Imprimer la
ls
sortie sur stdout et classer avec les codes de couleur :où (
man script
):Voir le fichier de sortie avec les couleurs:
la source
-e
est la même chose que--return
- pas besoin des deux;-efq
est--return --flush --quiet
.