.profile 和 .bash_profile 之间有什么区别,为什么我的系统上没有 .profile 文件?

Emi*_*roe 14 bash profile

所以我对 Linux 还是很陌生,最近在我的上网本上安装了 Fedora 19。我想更深入地了解 Linux 和 CLI,所以我现在正在阅读Learn Linux: The Hard Way

在练习 3 中,作者给出了以下命令:

  • ls -al
  • 猫.profile

我尝试按照这些说明进行操作,但无济于事。从 ls -al 可以看出,我的用户名目录中没有 .profile 文件。从我了解到的 .bash_profile 和 .profile 文件实际上是相同的。我从研究中得出的唯一区别是 .bash_profile 首先被检查。

我不明白的是为什么在 Linux 中有多个文件用于相同的功能,为什么作者使用 .profile 而不是 .bash_profile (如果我理解正确,当系统首先找到 .bash_profile 时不会读取 .profile )为什么我的系统上没有 .profile 文件?

msw*_*msw 14

.profile历史可以追溯到称为原始的Bourne shell sh。由于 GNU shell bash(取决于它的选项)是 Bourne shell 的超集,两个 shell 可以使用相同的启动文件。也就是说,只要只sh放入命令.profile

例如,alias是 的有效内置命令,bash但未知sh。因此,如果您.profile的主目录中只有一个并alias在其中放置一个语句,sh则会抱怨。所以有一个 bash 特定的文件,它具有 shell 初始化命令,当且仅当不存在.profile文件时,bash 才会读取这些命令。

实际上,这在某些安装中有点过于简单化,而且我对 Fedora 并不熟悉。在 bash 下,/etc/profile由 shell 在主目录中的任何文件之前读取。如果有一个系统范围的初始化脚本,它通常会说类似

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that
Run Code Online (Sandbox Code Playgroud)

为什么会这样?尝试兼容数十年的 shell 方言。为什么教程是这样写的?Bourne shell 不再经常使用,有些人甚至不知道除了 bash 之外还有其他类似 Bourne 的 shell。即使当(有限的)Bourne 语法用于更大的跨平台兼容性时,它也经常dash在 POSIX 兼容模式下由bash 或 bash 运行。实际上,实际的 Bourne shell 源可能是 Unix System V 的版权组件,现在似乎是 Novell 的财产,但我不知道他们在用它做什么(如果有的话)。

对于初级用户,使用其中之一$HOME/.profile$HOME/.bash_profile但不要同时使用,你会没事的。因为你已经有了它的.bash_profile工作,因为它可能有你的安装需要的系统特定的东西。

  • **历史奖励#1**:真正的伯恩壳终于从囚禁中逃脱了。http://minnie.tuhs.org/ 有 V7 的完整源代码(第一个带有 Bourne shell 的 unix 版本),而 http://heirloom.sourceforge.net/ 有一个稍微更新的 Bourne shell 版本,它仍然是实际可用。**历史奖励#2**:POSIX 需要`alias`,所以周围没有很多不知道它的`sh`。 (5认同)