我只是花了很多时间阅读登录和交互式 shell,以及为什么应该或不应该在各种配置文件和 bashrc 文件中设置环境变量、shell 函数等。在这个帖子有人提到 bash 特定的东西(比如提示选项)应该在 ~/.bashrc 中设置。这让我对 PS1 变量产生了疑问。在我见过的所有关于此的例子中,他们都有类似的东西export PS1=""
。因为它只对 bash 有意义,所以真的应该将其导出到环境中吗?只要PS1=""
在我的 ~/.bashrc 中就可以产生预期的效果,但我想知道我是否遗漏了一些东西。
答案1
这是正确的:PS1
仅在 bash 的交互式实例中有意义,因此应该设置它~/.bashrc
而不应该导出它。PS1
在其他 shell 中也有意义,但它具有不同的含义,因为 shell 之间的提示符扩展有所不同。事实上,即使在 bash 实例之间,也PS1
可以有不同的含义,因为含义取决于 shell 选项(至少promptvars
)。
导出PS1
到环境.profile
是对 1970 年代的一种回溯,当时只有一个 shell 使用它(Bourne shell)并且没有配置文件。如果您始终使用相同的 shell 并且从不进行不同的配置,那么它今天仍然有效。但是,所有并非纯粹为脚本编写而设计的现代 shell(csh、ksh、bash、zsh 等)在交互启动时都会读取配置文件(.cshrc
、.kshrc
、.bashrc
、.zshrc
、 ……),因此不再需要 1970 年代的方法。在特定于 shell 的文件中设置PS1
和其他特定于 shell 的设置,而不是将其导出到环境中,可以避免在使用不同的 shell 配置、不同的 shell 或无法显示常用提示符的不同终端时破坏内容。幻想。设置PS1
特定于 shell 的文件始终有效,而设置.profile
并导出它仅在“简单”情况下有效,因此没有理由不以正确的方式进行操作,但是网络上有很多糟糕的教程,并且甚至发行版中糟糕的默认配置。这就是生活。