sudo 不保留 PS1

sudo 不保留 PS1

以下配置是我的/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 suPS1终端更改为系统默认值时;忽略我的.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 覆盖。

相关内容