Quel effet auto
une option pour le --color
commutateur a-t-elle sur grep? Quand grep décide-t-il de colorer les chaînes correspondantes, et quand ne le fait-il pas?
la source
Quel effet auto
une option pour le --color
commutateur a-t-elle sur grep? Quand grep décide-t-il de colorer les chaînes correspondantes, et quand ne le fait-il pas?
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=auto
c'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 TERM
n'est normalement pas défini. Une solution simple à ce problème consiste à configurer le TERM=windows
dans 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 TERM
n'a pas besoin d'être définie (elle ne peut tout simplement pas l'être dumb
).
sdgstd.h
,istty(stdout)
renvoie0
si la sortie est redirigée vers un fichier.grep
etless
depuis le projet GnuWin (gnuwin32.sourceforge.net).cmd.exe
est amélioré avec l'ansicon
utilité.less --color=auto
fonctionne comme prévu: utilise la couleur lorsqu'aucune redirection n'est appliquée et pas lorsque la sortie est redirigée. Maisgrep --color=auto
n'imprime pas les séquences d'échappement dans les deux cas.