GREP_OPTIONS = --color = viene sempre ignorato?


8

Stavo giocando con le impostazioni GREP_OPTIONSe non riuscivo a farlo funzionare. Solo curioso di sapere perché.

Output comandi di test semplici:

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. Il 1 ° grep esce al terminale a colori (ogni 'o' è rossa)
  2. Il 2 ° grep emette meno colore (uguale a 1)
  3. Ma il 3 ° grep produce meno ma in bianco e nero - ma questo dovrebbe essere a colori.

Quindi sembra che grep stia ignorando GREP_OPTIONS. È un bug o sto facendo qualcosa di sbagliato?

(Ubuntu 12.04.2, GNU grep 2.10)


grep v3.1si lamenta a gran voce di GREP_OPTIONSogni invocazione:grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Tom Hale,

Uso: alias grep='GREP_COLOR="1;33;40" LANG=C grep --color=auto'per evidenziare in giallo.
Tom Hale,

Risposte:


11

Se grep oproduce output a colori, allora grepè un alias a grep --color=autoo grep --color=always(o possibilmente più opzioni), oppure GREP_OPTIONSè impostato su un valore che contiene --color=autoo --color=always. Poiché $GREP_OPTIONSè vuoto, deve essere l'alias.

Dal momento grep o | less -Rche non mostra i colori, l'alias deve essere grep --color=auto(una scelta sensata). Con l'alias, il grepcomando riceve sempre l' --coloropzione nella riga di comando e ciò ha la precedenza sulla variabile di ambiente.

Se si desidera utilizzare la variabile di ambiente, rimuovere la definizione di alias dalla propria ~/.bashrco per una sessione unalias grep. Puoi sostituirlo alias grep='grep --color=auto'con export GREP_OPTIONS='--color=auto': hanno essenzialmente lo stesso significato, tranne che:

  • l'impostazione GREP_OPTIONSsu un valore diverso ha la precedenza solo su quest'ultimo;
  • l'alias entra in funzione solo quando si esegue grepda una shell interattiva, mentre l'impostazione GREP_OPTIONSsi applica anche quando grepviene eseguita da script e altre applicazioni.

Non mettere mai --color=alwayso la maggior parte delle altre opzioni GREP_OPTIONS: si romperà molti programmi che analizzano l'output di grep. --color=autoriguarda l'unica opzione sicura da inserire GREP_OPTIONS. Per qualsiasi altra cosa, usa l'alias. Le versioni future di GNU grep elimineranno il supporto per l'opzione per questo motivo.

Nota che la definizione di alias va in ~/.bashrc(è un'impostazione di shell), mentre la definizione di variabile d'ambiente entra in ~/.profile(è un'impostazione di sessione). Vedi Esiste un file equivalente ".bashrc" letto da tutte le shell?

Se si desidera eseguire il comando unalias una sola volta, eseguire \grepinvece di grep(la citazione di qualsiasi parte del nome ignora la ricerca alias).


Sì, hai ragione, eseguire \ grep ... lo mostra correttamente. Grazie per il suggerimento bonus per avermi consigliato di non usare "= sempre" in .bashrc. +1
Richard

1
Si noti che GREP_OPTIONSè deprecato a favore della aliasvariante.
All Workers Are Essential
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.