97 votes

Préserver les couleurs tout en passant le passepoil au tee

ls -l --color=auto | tee output.log

Sans pipe/tee, c'est coloré. Comment puis-je faire en sorte qu'il reste coloré tout en utilisant le tuyau/tee ? tee (peut être coloré uniquement sur l'écran, je ne me soucie pas des couleurs dans les journaux).

131voto

Eamonn O'Brien-Strain Points 1426

Il suffit d'insérer unbuffer avant toute commande pour lui faire croire qu'il écrit sur une sortie interactive, même s'il s'agit en fait d'un pipeline vers un autre exécutable. Cela permettra de préserver 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 les autres distributions Linux de type Debian, vous pouvez installer unbuffer en faisant.

sudo apt-get install expect-dev

17voto

RedGrittyBrick Points 78148

Utilisez l'option ls --color=always

--color=auto n'aura pas de sortie couleur vers un pipeline - pour des raisons évidentes.

La page principale indique ce qui suit :

Avec --color=auto, les codes de couleur sont émis uniquement si la sortie standard est connectée à un terminal (tty).

11voto

Eveline Bernard Points 41

Je vais élargir le script solution donnée dans le commentaire de la réponse acceptée. En utilisant script peut être utile dans le cas où vous ne pouvez ou ne voulez pas installer le s'attendre à qui contient le unbuffer commandement.

Imprimer ls sortie vers 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).

Voir le fichier de sortie avec les couleurs :

less -r output.log

1voto

young_souvlaki Points 121

Voici une fonction basée sur cette réponse claire que je n'ai pas pu mettre dans les commentaires.

output()
{
    output_file=$1
    shift
    command=$@

    script -efq $output_file -c "$command"
    less $output_file
}

Utilisation

output file command

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X