web-dev-qa-db-fra.com

Comment puis-je une sortie de tuyau de couleur de couleur sur moins?

J'utilise Git Difff, qui produit une sortie colorée. Cependant, je trouve maintenant que je dois utiliser Diff ordinaire pour quelque chose, et il produit beaucoup de production difficile à lire en raison du manque de couleurs. Comment faire diffuser une sortie de couleur lisible et colorée? Idéalement, tout en les tuyant moins, pour un examen facile des grands fichiers.

38
Benubird

diff ne peut pas sortir des couleurs, vous avez besoin d'un autre programme, tel que colordiff pour cela. Les couleurs de la borne sont imprimées via codes d'évacuation ANSI qui moins n'interprètent pas par défaut. Pour obtenir less pour montrer correctement les couleurs, vous avez besoin de -r, voire mieux, -R changer:

colordiff -- "$file1" "$file2" | less -R

De man less:

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI  "color"  escape  sequences  are
          output in "raw" form.  Unlike -r, the screen appearance
          is maintained correctly in most  cases.   ANSI  "color"
          escape sequences are sequences of the form:

               ESC [ ... m

          where  the  "..."  is  zero or more color specification
          characters For the purpose of keeping track  of  screen
          appearance,  ANSI color escape sequences are assumed to
          not move the cursor.  You  can  make  less  think  that
          characters  other  than  "m"  can end ANSI color escape
          sequences by setting the environment  variable  LESSAN‐
          SIENDCHARS  to  the  list of characters which can end a
          color escape sequence.  And you  can  make  less  think
          that characters other than the standard ones may appear
          between the ESC and the m by  setting  the  environment
          variable  LESSANSIMIDCHARS  to  the  list of characters
          which can appear.

Sinon, vous pouvez utiliser more qui affichera les couleurs correctement par défaut.


Si vous ne pouvez pas installer de programmes externes, vous devriez pouvoir obtenir la même sortie en utilisant une approche plus manuelle:

diff a b | 
   Perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"} 
              elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
33
terdon

Les autres réponses ici pourraient être obsolètes. AS de CareTils 3.5 diff peut en effet produire une sortie colorée qui est désactivée par défaut lorsque le stdout n'est pas une console.

De la page man:

--color[=WHEN]
[.____] Coloriser la sortie; WHEN peut être never, always ou auto (la valeur par défaut)

Forcer la sortie de couleur lorsque STDOUT est un tuyau diff --color=always -- "$file1" "$file2" | less -R devrait marcher.

13
Kshitiz Sharma

Au tuyau de couleur diff to moins:

diff $file1 $file2 | colordiff | less -r

Pour le rendre plus lisible, en le limitant à un seul écran:

diff -uw $file1 $file2 | colordiff | less -r

Et, pour causer moins de ne pas afficher s'il n'y a qu'un seul écrin de contenu:

diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F

Le -f provoque moins de fermer immédiatement s'il y a moins d'un visuel de contenu, le tuyau à starr est dû au fait que lorsque moins vous perdez la sortie - par la tuyauterie à StDerr, il reçoit une sortie même si elle ne s'affiche pas.

Une solution alternative (et, je pense, meilleure), est d'utiliser -x pour empêcher moins d'élimination de l'écran:

diff -uw $file1 $file2 | colordiff | less -r -X -F

Cela fonctionne bien pour moi, mais pourrait être spécifique à Bash. Colordiff n'est pas un intégré, mais est facilement installé.

9
Benubird