shell 点文件和 *rcs:什么是合理的设置?

shell 点文件和 *rcs:什么是合理的设置?

bash 用户最终将会得到.bashrc.bash_profile.profile甚至更多。

现在,每个文件都在特定情况下加载,这都会导致混乱和沮丧。我不关心哪个 shell 是登录 shell,你也不应该关心。

我只是想确保对于发生的每个 shell 事件都加载相同的东西。

那么,设置它们的合理方法是什么?

我敢打赌,非 bash 特定的东西会进入.profile,并且一些文件源会进入其他文件,等等。究竟要在每个文件中放入什么才能为每个 shell 实现相同的环境?

笔记:我并不是问你特别喜欢在 rc 文件中放入什么,比如别名和函数等等。我只是问你如何布局它们,以免其中的内容随意拼接。

答案1

我只是想确保对于发生的每个 shell 事件都加载相同的东西。

如果你真的想要,就把一切都投入进去~/.profile并添加source ~/.profile在你的最后~/.bashrc。这是否可取则是另一个问题。无论如何,源~/.profile~/.bashrc一种非常常见的设置。

+------------+-----------------+--------------------+
| | 登录 shell | 交互式 shell |
+------------+-----------------+--------------------|
| 全部 | /etc/profile | |
| 伯恩语 | ----------------+--------------------|
| 贝壳 | ~/.profile | |
+------------+-----------------+--------------------|
| 仅 | ~/.bash-profile | /etc/bash.bashrc |
| | -------------------------------------|
| bash | ~/.bash-login | ~/.bashrc |
+------------+-----------------+--------------------+

C shell 和派生的 shell 使用不同的文件集 (.login、.cshrc、..)。

到底需要在每个 shell 中放入什么才能为每个 shell 实现相同的环境?

如果你指的环境是环境变量,那么只需在 ~/.profile 中设置所有变量即可。如果你指的环境是更广泛意义上的环境,那要视情况而定。

这里的问题是,交互式 shell 和登录 shell 的环境最好不要完全相同。别名就是一个例子:也许你想在交互式 shell 中使用别名,但它们很可能会让您的脚本做出奇怪的事情。所以你不想在非交互式 shell 中使用别名 => 将它们放入~./bashrc

答案2

我修复了一些问题,以便几乎所有设置都由登录 shell 完成,几乎没有每个 shell 都完成。这意味着我的.profile文件很复杂;我的文件( Bash 和C shell.kshrc的类似文件)不存在。我从未发现这是个问题。这也意味着非登录 shell 尽可能快 - 它们不会到处寻找文件来解析它们不会使用的命令。这可能是 Bourne shell 时代的遗留问题 - 当时每个 shell 脚本都不存在。但我从未发现任何需要如此专门处理的东西。.bashrc.cshrc

相关内容