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