我从 开始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=+
我签入了GNOME
和awesome
。这是预期的行为吗?我可以做点什么吗?
答案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_everytime
source .bash_once
source .bash_everytime
.profile
.bash_profile
.bashrc