Réponses:
Avec --color=auto, grep mettra en évidence les chaînes correspondantes si (et seulement si) la sortie est écrite directement sur le terminal et ledit terminal est capable d'afficher une sortie colorée.
Normalement, --color=autoc'est ce que vous voulez. Si, par exemple, vous utilisez grep pour faire correspondre une URL et la redirigez vers Wget, Wget verra à la \e[1;31mhttp://...place de l'URL réelle (et s'étouffera dessus).
Les commandes suivantes devraient entraîner une sortie colorée:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Cependant, cette commande ne doit pas:
echo Super User | grep --color=auto Super | cat
Toute incohérence avec ce comportement doit être considérée comme un bogue.
Avec --color=auto, la dernière version de Grep pour Windows (2.5.4) - ainsi que la version originale 2.5.4 sur laquelle elle est basée - coloriez la sortie si et seulement si la condition
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
est vrai, c'est-à-dire que si et seulement si la sortie est écrite sur un terminal, la variable d'environnementTERM est définie et le terminal n'est pas muet .
Cela ne produira pas le comportement souhaité sous Windows, car il TERMn'est normalement pas défini. Une solution simple à ce problème consiste à configurer le TERM=windowsdans le panneau de configuration.
La dernière version de grep (2.14) corrige ce problème en colorant la sortie si et seulement si la condition
isatty(STDOUT_FILENO) && should_colorize()
est vrai, où should_colorize()est défini différemment pour POSIX et Win32:
Pour les premiers, la condition est équivalente à celle de 2.5.4; pour ce dernier, la variable d'environnement TERMn'a pas besoin d'être définie (elle ne peut tout simplement pas l'être dumb).
sdgstd.h, istty(stdout)renvoie 0si la sortie est redirigée vers un fichier.
grepet lessdepuis le projet GnuWin (gnuwin32.sourceforge.net). cmd.exeest amélioré avec l' ansiconutilité. less --color=autofonctionne comme prévu: utilise la couleur lorsqu'aucune redirection n'est appliquée et pas lorsque la sortie est redirigée. Mais grep --color=auton'imprime pas les séquences d'échappement dans les deux cas.