导出或不导出 bash PS1 变量

Mik*_*ney 13 bash environment-variables bashrc

我只是花了很多时间阅读登录和交互式 shell 以及为什么应该或不应该在各种配置文件和 bashrc 文件中设置环境变量、shell 函数等。在这篇文章中提到应该在 ~/.bashrc 中设置 bash 特定的东西,比如提示选项。这让我想知道 PS1 变量。在我见过的所有关于此的示例中,它们都有类似export PS1="". 这真的应该导出到环境中,因为它只对 bash 有意义吗?只是PS1=""在我的 ~/.bashrc 中为我产生了预期的效果,但我想知道我是否遗漏了什么。

Gil*_*il' 18

这是正确的:PS1仅在 bash 的交互式实例中才有意义,因此它应该被设置~/.bashrc并且不应该被导出。PS1在其他 shell 中也是有意义的,但它有不同的含义,因为 shell 之间的提示扩展不同。事实上,即使在 bash 实例之间,PS1也可能有不同的含义,因为含义取决于 shell 选项(至少promptvars)。

导出PS1到环境 from.profile是对 1970 年代的倒退,当时只有一个 shell(Bourne shell)使用它并且它没有配置文件。如果您始终使用相同的 shell 并且从不以不同方式对其进行配置,那么它今天仍然有效。但是,所有不是纯粹为脚本设计的现代 shell(csh、ksh、bash、zsh 等)在交互式启动时都会读取配置文件(.cshrc, .kshrc, .bashrc, .zshrc, ...),因此 1970 年代的方法不再必要。PS1在特定于 shell 的文件中设置和其他特定于 shell 的设置,而不是将其导出到环境中,可避免在您使用不同的 shell 配置或不同的 shell 或无法显示通常提示的不同终端时破坏事情幻想。环境PS1在特定于 shell 的文件中一直有效,而将其设置.profile和导出仅在“简单”情况下有效,因此没有理由不以正确的方式进行操作,但是网络上有很多糟糕的教程,甚至发行版中的错误默认配置。C'est la vie