从 .bash_profile 加载 .profile 还是根本不使用 bash_profile?

从 .bash_profile 加载 .profile 还是根本不使用 bash_profile?

我在运行 Yosemite 的 MAC 上。

直到最近,我只有一个 .profile,其中我将目录添加到我的 PATH 中。

现在我有一个 .bash_profile,根据我的经验和后来在网上阅读的内容,它会导致打开终端窗口时忽略 .profile。

经过一些阅读后,我确实了解 .pofile 和 .bash_profile 有何不同。我确实知道 .bash_profile 仅在启动 shell 时被调用。

然而,我仍然不确定,对于基本用户来说,以下任一方面的缺点(如果有的话)是什么:

  • 从 .bash_profile 调用 .profile,
  • 或者直接忽略 .bash_profile 并直接从 .profile 文件中的 shell 设置我可能需要的所有环境变量。

例如,我读到这里由于 .bash_profile 存在时 .profile 被忽略,我可以添加

. ~/.profile 

在我的 bash_profile 中调用 .profile。

或者,虽然我知道 .bash_profile 允许我设置 bash 之外不需要的变量,但我仍然在 .profile 中设置我需要的所有内容,但看不到使用 .bash_profile 给我带来了什么。

答案1

~/.profile传统的 sh在启动时读取该文件登录外壳

Bash 向后兼容 sh 但提供附加功能,读取.bash_profile,如果不存在,则尝试.profile替代。当您的登录 shell 是 bash 时,这允许您使用.profile普通的 sh 并.bash_profile利用 bash 的额外功能。

.bashrc当交互调用时,Bash 还会读取另一个文件。这是放置提示、别名、完成设置等的地方。但是,它不会在交互式登录 shell 中读取该文件。因此,您.bash_profile应该.bashrc在 shell 交互运行时获取源代码 - 否则您必须维护单独的文件。

几乎没有任何理由偏离以下内容.bash_profile

. ~/.profile
case $- in *i*) . ~/.bashrc;; esac

将登录时的内容(例如环境变量定义).profile和交互式 shell 的内容放入.bashrc.

如果您只使用 bash 作为登录 shell,则可能没有.profile,并将登录时的内容直接放入 中,再加上交互时.bash_profile要加载的行。.bashrc

1之前也尝试过,但这并不是很有用。.bash_login.profile

相关内容