¿GREP_OPTIONS = --color = siempre se ignora?

8

Estaba jugando con la configuración GREP_OPTIONSy no pude hacerlo funcionar. Simplemente curioso por qué.

Salida de comandos de prueba simple:

richard@ubuntu:~$ echo $GREP_OPTIONS

richard@ubuntu:~$ 

richard@ubuntu:~$ ls | grep o 
Desktop
downloads
Dropbox
ebooks
workspace

richard@ubuntu:~$ ls | grep o --color=always | less -R 

richard@ubuntu:~$ export GREP_OPTIONS="--color=always" 
richard@ubuntu:~$ ls | grep o  | less -R 
  1. El primer grep sale al terminal en color (cada 'o' es roja)
  2. El segundo grep sale con menos color (igual que 1)
  3. Pero el tercer grep sale a menos pero en blanco y negro, pero esto debería ser en color.

Entonces parece que grep está ignorando GREP_OPTIONS. ¿Es eso un error o estoy haciendo algo mal?

(Ubuntu 12.04.2, GNU grep 2.10)

Ricardo
fuente
grep v3.1en voz alta se queja GREP_OPTIONSen cada invocación:grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Tom Hale
Yo uso: alias grep='GREP_COLOR="1;33;40" LANG=C grep --color=auto'para resaltar en amarillo.
Tom Hale

Respuestas:

11

Si grep oproduce salida de color, entonces grepes un alias para grep --color=autoo grep --color=always(o posiblemente más opciones), o GREP_OPTIONSse establece en un valor que contiene --color=autoo --color=always. Como $GREP_OPTIONSestá vacío, debe ser el alias.

Como grep o | less -Rno muestra colores, el alias debe ser grep --color=auto(una elección sensata). Con el alias, el grepcomando siempre recibe la --coloropción en la línea de comando, y esto tiene prioridad sobre la variable de entorno.

Si desea utilizar la variable de entorno, elimine la definición de alias de su ~/.bashrc, o para una sesión de ejecución unalias grep. Puede reemplazar alias grep='grep --color=auto'por export GREP_OPTIONS='--color=auto': tienen esencialmente el mismo significado, excepto que:

  • establecer GREP_OPTIONSun valor diferente solo anula el último;
  • el alias solo se activa cuando se ejecuta grepdesde un shell interactivo, mientras que la configuración GREP_OPTIONStambién se aplica cuando grepse ejecuta desde scripts y otras aplicaciones.

Nunca ponga --color=alwaysni la mayoría de las otras opciones en GREP_OPTIONS: rompería muchos programas que analizan la salida de grep. --color=autoes la única opción segura para poner GREP_OPTIONS. Para cualquier otra cosa, use el alias. Las versiones futuras de GNU grep dejarán de admitir la opción por este motivo.

Tenga en cuenta que la definición de alias entra ~/.bashrc(es una configuración de shell), mientras que la definición de la variable de entorno entra ~/.profile(es una configuración de sesión). Consulte ¿Hay un archivo equivalente ".bashrc" leído por todos los shells?

Si desea ejecutar el comando sin alias solo una vez, ejecute en \greplugar de grep(citando cualquier parte del nombre omite la búsqueda de alias).

Gilles 'SO- deja de ser malvado'
fuente
Sí, tienes razón, ejecutar \ grep ... lo muestra correctamente. Gracias por el consejo extra por aconsejarme que no use "= siempre" en .bashrc. +1
Richard
1
Tenga en cuenta que GREP_OPTIONSestá en desuso a favor de la aliasvariante.
Todos los trabajadores son esenciales