echo $HOME
在我的 Red Hat 机器上,当我使用普通用户帐户运行命令时,我得到/home/snrub
.当我运行命令sudo vim foo.txt
并在 vim 中输入时echo $HOME
,我会/root
返回。我希望它返回/home/snrub
,以便它能够解析我很酷的 Vim 插件,即使当我使用 sudo 编辑文件时也是如此。根据 sudo 手册页,-E
或-H
选项应该可以工作,但是如果我运行sudo -E vim foo.txt
或sudo -H vim foo.txt
或 ,sudo -EH vim foo.txt
它们仍然不会解析我的 home .vimrc 文件并/root
在我输入时返回echo $HOME
。
我还尝试将以下行添加到 sudoers 文件中,然后保存:
Defaults env_keep += "HOME"
还是行不通。如果我运行sudo vim foo.txt
然后在 Vim 中输入echo $HOME
它仍然显示/root
.同样(为了验证这不是 Vim 严格的问题),如果我键入sudo emacs foo.txt
并按 Enter,然后键入 Alt-X,键入getenv
并按 Enter,然后键入HOME
并按 Enter,它仍然会返回/root
。我该如何让它返回/home/snrub
?
答案1
作为安全预防措施,在默认情况下启用的选项sudo
下重置环境变量列表(TERM、PATH、HOME、MAIL、SHELL、LOGNAME、USER、USERNAME 和 SUDO_*) 。env_reset
为了将 HOME 从您的用户帐户转移到sudo
环境中,您必须:
在 sudo 规则上使用 SETENV 标签以及
-E
选项,或者特别取消设置该
env_reset
选项。
另外请确保该选项always_set_home
处于关闭状态(默认情况下)。
请参阅sudoers 手册页了解所有细节和互动。