环境变量已设置但未受尊重

环境变量已设置但未受尊重

我发现以下行为有点令人困惑,有人可以解释一下为什么会发生吗?

/etc/bash.bashrc我有:

EDITOR=vim

确实如此:

lev@home ~ $ echo $EDITOR
vim

我想visudo尊重这一点。现在,我读到man visudo它并不总是尊重这个变量,但是我不明白为什么以下给出了不同的结果:

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

请注意,该EDITOR变量也必须为 root 设置 (AFAIU):

$ sudo echo $EDITOR
vim

另外,当我AUR使用yaourt(我在 Arch Linux 上)安装软件包并选择编辑 PKGBUILD 文件时,我看到:

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

==> Edit PKGBUILD with:

所以问题不仅仅限于visudo.为什么我可以看到变量集,但程序却看不到(除非我在命令中再次指定它)?

技术信息:

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)

答案1

您已设置它,但未导出它。将行更改为:

export EDITOR=vim

答案2

按照 Chris 的答案将变量导出到子进程固有的环境中后,您需要告诉 sudo 保留当前环境。这可以通过 sudo-E选项来完成,它将保留整个环境;或者在这种特定情况下,添加EDITORenv_keepsudoers 文件中的变量以仅保留该变量。

相关内容