¿Qué hace el modificador grep --color=auto?

¿Qué hace el modificador grep --color=auto?

¿Qué efecto tiene autocomo opción para el --colorcambio 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=autoes 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 ambientalTERMestá definido y el terminal no estámudo.

Esto no producirá el comportamiento deseado en Windows, ya que TERMnormalmente no está definido. Una solución fácil a este problema es configurar TERM=windowsen 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, TERMno es necesario establecer la variable de entorno (simplemente no se puede dumb).

información relacionada