ÉDITER:
Je voudrais recommander que l'analyse des couleurs soit une idée généralement mal conçue.
Une partie de la raison pour laquelle je le voulais était pour que je puisse à la fois l'analyser et le transmettre dans ma propre sortie de script. C'est ... d'accord, mais il serait probablement plus sain d'utiliser de la porcelaine ou quelque chose comme ça et de reconstruire les parties colorées moi-même!
La question d'origine suit.
J'aime voir la couleur parce que mes scripts sont assez robustes (jusqu'à présent) pour gérer les codes de couleur. Il semble que je vais à contre-courant ici, mais honnêtement, je ne vois pas le gros problème d'avoir à analyser des choses comme les codes d'échappement dans les scripts. Si les couleurs aident à une utilisation interactive, pourquoi ne pourraient-elles pas aider à l'utilisation de scripts où je pourrais regrouper des données et croquer encore plus de données que je ne le ferais manuellement? Les couleurs ne seraient-elles pas encore plus importantes?
Quoi qu'il en soit, j'ai un petit script Shell soigné que j'ai écrit que munges git status
sortie, et je cherche juste à faire en sorte que ce script garde les couleurs intactes. Ma configuration globale de git est définie de sorte que les listes de fichiers modifiés et non suivis apparaissent en couleur dans l'état git. Malheureusement contrairement à git diff
il n'y a pas d'option pour forcer la couleur pour git status
que je peux trouver.
Pour être parfaitement clair, voici le problème:
$ git status
produit une sortie parfaite, mais (un extrait de mon script suit)
git status | sed "s/^#/\x1b[34m#[0m/"
ne produit pas de couleur git status
sortie, et vous pouvez même voir ici que je convertis explicitement les premiers caractères de hachage en bleu car cela aide à mettre en évidence les différentes régions de sortie de mon script.
Est-ce que quelqu'un sait comment l'obtenir pour éteindre les couleurs? Y a-t-il peut-être un programme standard que je peux utiliser qui peut être utilisé comme un tuyau STDIN/STDOUT "faux terminal"? En fait, je travaille également sur un outil pseudo-terminal pty afin que je puisse certainement l'utiliser à cette fin, mais c'est une solution plutôt lourde (et pas encore prête à l'emploi car je n'ai pas fini de le construire).
Pour éviter de modifier votre configuration git, vous pouvez le faire uniquement pour la commande actuelle en passant la variable config avec -c
:
git -c color.status=always status | less -REX
Cette variable concerne uniquement la commande status
. Pour diff
, show
et log
la variable est color.ui
:
git -c color.ui=always diff | less -REX
Notez que -c
doit devenir avant l'argument status
ou diff
, et non après.
ÉDITER:
Je voudrais recommander fortement que l'analyse des couleurs est une idée généralement mal conçue.
Une partie de la raison pour laquelle je le voulais était pour que je puisse à la fois l'analyser et le transmettre dans ma propre sortie de script. C'est ... d'accord, mais il serait probablement plus sain d'utiliser de la porcelaine ou quelque chose comme ça et de reconstruire les parties colorées moi-même!
La réponse originale suit.
Je continue de trouver des réponses très rapidement après avoir posé des questions. Quelque chose à voir avec la réflexion sur un problème suffisamment longtemps pour l'écrire et formuler de meilleures approches pour le résoudre. Quoi qu'il en soit, la solution à cela est juste
git config color.status always
J'imagine qu'une solution à usage général implique expect
ou quelque chose pty
lié à forcer tous les programmes qui en ont besoin à penser qu'ils sont sur un terminal.
J'ai eu ce même problème lors de l'utilisation d'un alias git qui exécute une commande Shell. Apparemment, le git Shell n'hérite pas de l'environnement actuel, donc il ne sait rien de mes paramètres de coloration.
En plus d'ajouter le paramètre global de l'interface utilisateur de git color, j'ai corrigé cela en faisant ressembler mon alias ci-dessous, sa commande secondaire qui nécessite d'être invité à utiliser les couleurs, car git le sera par défaut à partir de la version 1.8.x que les gens ont mentionnée.
[alias]
ignored = !git ls-files -v|grep --color '^h'
Cela produit une sortie colorisée équivalente maintenant lorsqu'elle est exécutée comme alias, comme si je venais d'exécuter la commande.
Pour sed, cette autre réponse semble fonctionner de manière plus fiable, utilisez tput. https://unix.stackexchange.com/a/45954