许多人和发行版在不同的地方设置他们的 PS? 字符串。最常见的位置是 /etc/profile, /etc/bashrc, ~/.bash_profile, 和 ~/.bashrc 。Johan Kullstam (johan19 at idt dot net) 写道
PS1 字符串应该设置在 .bashrc 中。这是因为非交互式的 bash 会特意取消设置 PS1。bash 手册页说明了 PS1 的存在与否是如何成为判断是否处于交互式与非交互式(即脚本)bash 会话中的好方法。
我意识到这一点的方式是 startx 是一个 bash 脚本。这意味着,startx 将会覆盖你的提示符。当你在 .profile (或 .bash_profile) 中设置 PS1,在控制台登录,通过 startx 启动 X,你的 PS1 会在这个过程中被清除,让你只剩下默认提示符。
一种解决方法是使用 -ls 选项启动 xterm 和 rxvt,以强制它们读取 .profile。但是,任何时候通过非交互式 shell 脚本中间人调用 shell 时,PS1 都会丢失。system(3) 使用 sh -c,如果 sh 是 bash,将会杀死 PS1。更好的方法是将 PS1 定义放在 .bashrc 中。每次 bash 启动时都会读取它,并且交互式的东西 - 例如 PS1 应该放在这里。
因此,应该强调 PS1=..blah.. 应该放在 .bashrc 中,而不是 .profile 中。
我试图重现他解释的问题,但遇到了另一个问题:我的 PROMPT_COMMAND 变量(稍后会介绍)被清空了。我对这方面的知识有些不足,所以我打算听取 Johan 的意见。