¿Qué efecto tiene auto
como opción para el --color
cambio en grep? ¿Cuándo decide grep colorear las cadenas coincidentes y cuándo no?
Respuesta1
Comportamiento esperado
Con --color=auto
, grep resaltará las cadenas coincidentes si (y solo si) la salida se escribe directamente en el terminal y dicho terminal es capaz de mostrar salida en color.
Normalmente, --color=auto
es lo que quieres. Si, por ejemplo, usa grep para hacer coincidir una URL y la canaliza a Wget, Wget verá \e[1;31mhttp://...
en lugar de la URL real (y se ahogará con ella).
Los siguientes comandos deberían dar como resultado una salida en color:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Este comando, sin embargo, no debería:
echo Super User | grep --color=auto Super | cat
Cualquier inconsistencia con este comportamiento debe considerarse un error.
Código fuente
Con --color=auto
, lo últimoGrep para Windowsversión (2.5.4), así como la 2.5.4 original en la que se basa, colorea la salida si y solo si se cumple la condición
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
es verdadero, es decir, si y sólo si la salida se escribe en un terminal, elVariable ambientalTERM
está definido y el terminal no estámudo.
Esto no producirá el comportamiento deseado en Windows, ya que TERM
normalmente no está definido. Una solución fácil a este problema es configurar TERM=windows
en el panel de control.
La última versión degrep(2.14) soluciona este problema coloreando la salida si y sólo si la condición
isatty(STDOUT_FILENO) && should_colorize()
es cierto, donde should_colorize()
se define de forma diferente para POSIX y Win32:
Para el primero, la condición es equivalente a la del 2.5.4; para este último, TERM
no es necesario establecer la variable de entorno (simplemente no se puede dumb
).