Variável de ambiente definida mas não respeitada

3

Acho o seguinte comportamento um pouco confuso, alguém pode explicar por que isso acontece?

Em /etc/bash.bashrc tenho:

EDITOR=vim

E é realmente definido:

lev@home ~ $ echo $EDITOR
vim

Gostaria que visudo respeitasse isso. Agora, eu li em man visudo que nem sempre respeita essa variável, mas eu não entendo porque o seguinte dá resultados diferentes:

$ sudo visudo # opens vi
$ sudo EDITOR=vim visudo # opens vim

Observe que a variável EDITOR também deve ser definida para raiz (AFAIU):

$ sudo echo $EDITOR
vim

Além disso, quando eu instalo pacotes do AUR usando yaourt (estou no Arch Linux) e opto por editar o arquivo PKGBUILD, vejo:

Please add $EDITOR to your environment variables
for example:
export EDITOR="vim" (in ~/.bashrc)
(replace vim with your favorite editor)

==> Edit PKGBUILD with:

Portanto, o problema não está limitado a visudo . Por que posso ver o conjunto de variáveis, mas os programas não podem (a menos que eu o especifique novamente no comando)?

Informação técnica:

lev@home ~ $ uname -a
Linux home 3.6.9-1-ARCH #1 SMP PREEMPT Tue Dec 4 08:04:10 CET 2012 x86_64 GNU/Linux
lev@home ~ $ bash --version | head -1
GNU bash, version 4.2.39(2)-release (x86_64-unknown-linux-gnu)
    
por Lev Levitsky 13.12.2012 / 12:08

2 respostas

4

Você definiu, mas não o exportou. Mude a linha para isso:

export EDITOR=vim
    
por 13.12.2012 / 12:11
4

Depois de seguir a resposta de Chris para exportar a variável para o ambiente de processos filhos para inerentes, você precisa dizer ao sudo para preservar seu ambiente atual. Isso pode ser feito com a opção -E do sudo, que preservará todo o ambiente; ou, neste caso específico, adicione EDITOR à variável env_keep em seu arquivo sudoers para preservar apenas essa variável.

    
por 13.12.2012 / 16:45