¿Qué efecto tiene auto
como opción para el --color
interruptor en grep? ¿Cuándo grep decide colorear las cadenas coincidentes y cuándo no?
fuente
¿Qué efecto tiene auto
como opción para el --color
interruptor en grep? ¿Cuándo grep decide colorear las cadenas coincidentes y cuándo no?
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 una salida en color.
Normalmente, --color=auto
es lo que quieres. Si, por ejemplo, usa grep para hacer coincidir una URL y canalizarla a Wget, Wget verá en \e[1;31mhttp://...
lugar de la URL real (y se ahogará).
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 debe:
echo Super User | grep --color=auto Super | cat
Cualquier inconsistencia con este comportamiento debe considerarse un error.
Con --color=auto
la última versión de Grep para Windows (2.5.4), así como la 2.5.4 original en la que se basa, colorea la salida si y solo si la condición
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
es verdadero, es decir, si y solo si la salida se está escribiendo en un terminal, la variable de entornoTERM
está definida y el terminal no es tonto .
Esto no producirá el comportamiento deseado en Windows, ya TERM
que normalmente no está definido. Una solución fácil a este problema es configurarlo TERM=windows
en el panel de control.
La última versión de grep (2.14) soluciona este problema coloreando el resultado si y solo si la condición
isatty(STDOUT_FILENO) && should_colorize()
es cierto, donde should_colorize()
se define de manera diferente para POSIX y Win32:
Para el primero, la condición es equivalente a la de 2.5.4; para este último, la variable de entorno TERM
no tiene que establecerse (simplemente no puede ser dumb
).
sdgstd.h
,istty(stdout)
devuelve0
si la salida se redirige a un archivo.grep
yless
de proyecto GNUWin (gnuwin32.sourceforge.net).cmd.exe
Se mejora con laansicon
utilidad.less --color=auto
funciona como se espera: usa el color cuando no se aplica la redirección y no cuando la salida se redirige. Perogrep --color=auto
no imprime secuencias de escape en ambos casos.