¿Qué significa la opción --color = auto para GNU grep?

14

AFAICT, ni la página del manual para GNU grep, ni se info grepdigna deletrear qué --color=autosignifica.

Debo ser una de las pocas personas en el planeta para la cual el significado de esta opción no es inmediatamente obvio.

Supongo que --color=auto"está EN ALGUNA PARTE en el medio" --color=nevery --color=always, pero eso todavía deja demasiado sin especificar.

kjo
fuente

Respuestas:

14

Las reglas son las mismas que para ls, lo que hace un mejor trabajo al documentarlo man ls. Citando:

El uso del color para distinguir los tipos de archivos está deshabilitado de manera predeterminada y
con --color = nunca. Con --color = auto, ls emite códigos de color solo cuando
la salida estándar está conectada a un terminal. La
variable de entorno LS_COLORS puede cambiar la configuración. Use el comando dircolors para configurarlo.

Por lo tanto, el comando solo agregará el formato de color cuando la salida vaya a una terminal y no, por ejemplo, cuando vaya a una tubería donde el programa que consume la tubería podría no manejar bien el formato de color.

Eric Renouf
fuente
3
Sí, las principales veces que me he encontrado con esto fueron menos. Si lo usa less -R, puede obtener resaltado de coincidencias, pero debe especificar --color=alwaysgrep para que funcione.
Holloway
10

Dado que grepes un programa GNU, otra opción podría ser echar un vistazo al código fuente.


Internamente grep prueba static int color_optionpara 0, 1o 2.

  • 0 nunca use salida coloreada
  • 1 siempre usa colores
  • 2 solo use colores cuando imprima en un terminal

Ahora, cuando entrega --color=autoa grep como argumento en su CLI, establece internamente la variable color_optionen 2.

Si color_optiones igual2 grep entonces se comprueba si STDOUTestá vinculado a un terminal o si el usuario deshabilitó el outpit coloreado a través de shell environment variables. Si el primero es verdadero y se permite la salida coloreada, grepcontinúa con la evaluación de los colores que se deben usar y finalmente se imprime en su CLIcolor.


fuente: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
pidi
fuente