我发现以下行为有点令人困惑,有人可以解释一下为什么会发生吗?
在/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
选项来完成,它将保留整个环境;或者在这种特定情况下,添加EDITOR
到env_keep
sudoers 文件中的变量以仅保留该变量。