X mangle 是否提示环境变量?

X mangle 是否提示环境变量?

我从 开始startx。在此之前,我PS1的环境中有:

$ cat /proc/self/environ | tr '\0' '\n' | egrep '^PS'
PS1=[\u@\H \w] 
PS3=> 
PS2=> 
PS4=+ 

从里面X我得到:

$ cat /proc/self/environ | tr '\0' '\n' | egrep '^PS'
PS3=> 
PS4=+ 

我签入了GNOMEawesome。这是预期的行为吗?我可以做点什么吗?

答案1

不,X 不会破坏环境变量。但 bash 确实如此;具体来说,它在非交互式 shell 中取消PS1设置:PS2

$ PS1='my PS1' PS2='my PS2' PS3='my PS3' PS4='my PS4' bash -c export |grep PS
declare -x PS3="my PS3"
declare -x PS4="my PS4"

Bash 可能作为登录序列的一部分在某个地方执行。如果你/bin/sh是bash并且很常见,即使不是,这是有保证的。

提示符是一个 shell 设置,仅在交互式 shell 中有意义,因此将其导出到环境中没有意义。将其设置为 shell 交互式初始化文件的一部分.bashrc

答案2

我假设你正在bash作为 shell 运行。如果您正在运行其他东西,具体细节会有所不同,但方法将保持大致相同。要确认您的登录 shell,请运行以下命令:getent passwd "${USER:-$(id -nu)}" | awk -F: '{print $NF}'

我怀疑您的提示是在.profile或中定义的.bash_profile,并且在您登录终端时设置(一次)。当您调用startx并打开终端时,它“知道”这不是登录会话,因此会调用.bashrc

您可以使用以下命令确认这一点,您可能希望在问题中引用其结果:grep '\<PS.*=' .profile .bash_profile .bashrc

我的建议是配置 GUI 终端应用程序以强制登录 shell(假设您的安装中存在这样的选项)。

作为一种替代方法,检查文件.profile.bash_profile、 和.bashrc,并将一次性启动代码移动到新文件(例如 )和需要为新文件(例如 ).bash_once的每个实例重复的代码。然后,您可以适当地从现在为空的或、 和。bash.bash_everytimesource .bash_oncesource .bash_everytime.profile.bash_profile.bashrc

相关内容