导出或不导出 bash PS1 变量

导出或不导出 bash PS1 变量

我只是花了很多时间阅读登录和交互式 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并导出它仅在“简单”情况下有效,因此没有理由不以正确的方式进行操作,但是网络上有很多糟糕的教程,并且甚至发行版中糟糕的默认配置。这就是生活

相关内容