以下配置是我的/etc/sudoers
:
Defaults !visiblepw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS EDITOR DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
当我sudo su
的PS1
终端更改为系统默认值时;忽略我的.bashrc
PS1
设置。我该如何解决这个问题,以便环境变量在 ing 时不会丢失sudo su
?
诡异的;它正在导出,但由于某种原因EDITOR
没有导出;PS1
就像它被强行推翻一样;我怎样才能阻止这个?
当我运行sudo -V
要保留的变量时PS1
会列出;它没有列在要删除的变量中。
答案1
不要使用sudo su
.这是对 的滥用/无用的使用su
。正确的等价物是sudo -s
.
如果你想保留环境变量,你需要sudo -Es
.
如果您发现情况$PS1
仍在变化,那么您可能有一个脚本来做这件事。您可以sudo -Es $SHELL -x
通过执行和阅读输出来找出位置。
答案2
一两年前,Unix 系统 shell 的作者和软件包维护者一致认为,通常最好不是 export PS1
(由于各种 shell 之间存在巨大的语法差异,加上某些 shell 在提供其他 shell 提示时的某些“爆炸性”行为)。我们都同意将PS1
初始化移至交互式 shell 启动文件,即~/.mkshrc
、~/.kshrc
等~/.bashrc
。
免责声明:我是 mksh 开发人员。
答案3
通常,您可以$ENV
在调用时显式设置 shell 的源文件。例如,您可能会在以下方面有一些运气:
sudo ENV=/home/$USER/.bashrc su
如果失败,您也可以尝试以下操作:
sudo su -c "exec </dev/tty ENV="~/.bashrc" bash -i"
答案4
PS1
可能是在 shell 启动时初始化的。即,该值确实被 shell 保留,sudo
但随后被 shell 覆盖。