É GREP_OPTIONS = --color = sempre ignorado?

8

Eu estava brincando com a configuração GREP_OPTIONS e não consegui fazê-lo funcionar. Apenas curioso sobre o porquê.

Saída de comandos de teste simples:

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. O primeiro grep é enviado para o terminal em cores (cada 'o' é vermelho)
  2. O segundo grep produz via menos colorido (o mesmo que 1)
  3. Mas o terceiro grep resulta em menos, mas em preto & branco - mas isso deve ser em cores.

Portanto, parece que o grep está ignorando GREP_OPTIONS . Isso é um erro ou estou fazendo algo errado?

(Ubuntu 12.04.2, GNU grep 2.10)

    
por Richard 27.03.2013 / 00:32

1 resposta

11

Se grep o produzir saída em cores, então grep será um alias para grep --color=auto ou grep --color=always (ou possivelmente mais opções) ou GREP_OPTIONS será definido como um valor que contenha --color=auto ou% código%. Como --color=always está vazio, deve ser o alias.

Como $GREP_OPTIONS não mostra cores, o alias deve ser grep o | less -R (uma escolha sensata). Com o alias, o comando grep --color=auto sempre recebe a opção grep na linha de comando, e isso tem precedência sobre a variável de ambiente.

Se você quiser usar a variável de ambiente, remova a definição de alias de seu --color ou, para uma sessão, execute ~/.bashrc . Você pode substituir unalias grep por alias grep='grep --color=auto' : eles têm essencialmente o mesmo significado, exceto que:

  • definir export GREP_OPTIONS='--color=auto' como um valor diferente apenas substitui o último;
  • o alias só entra em ação quando você executa GREP_OPTIONS de um shell interativo, enquanto a configuração grep também se aplica quando GREP_OPTIONS é executado a partir de scripts e outros aplicativos.

Nunca coloque grep ou a maioria das outras opções em --color=always : isso quebraria muitos programas que analisam a saída de GREP_OPTIONS . grep é a única opção segura para colocar em --color=auto . Para qualquer outra coisa, use o alias. Futuras versões do GNU grep derrubarão o suporte para a opção por este motivo.

Observe que a definição de alias entra em GREP_OPTIONS (é uma configuração de shell), enquanto a definição de variável de ambiente entra em ~/.bashrc (é uma configuração de sessão). Veja Existe um arquivo equivalente ".bashrc" lido por todos os shells?

Se você deseja executar o comando unaliased apenas uma vez, execute ~/.profile em vez de \grep (a citação de qualquer parte do nome ignora a pesquisa de alias).

    
por 27.03.2013 / 00:55