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

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

我对 Linux 还很陌生,最近在我的上网本上安装了 Fedora 19。我想更深入地了解 Linux 和 CLI,所以我现在正在阅读学习 Linux:艰难的道路

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

  • ls-al
  • 猫.profile

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

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

答案1

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

例如,alias是 的有效内置命令,bash但 是未知的sh。因此,如果您.profile的主目录中只有 a 并alias在其中添加了一条语句,sh就会抱怨。因此,有一个 bash 特定文件,其中包含 shell 初始化命令,当且仅当不存在文件时 bash 才会读取该命令.profile

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

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that

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

对于初级用户,使用其中一个$HOME/.profile$HOME/.bash_profile但不要同时使用两者就可以了。因为您已经使用过.bash_profile它,因为它可能包含您的安装所需的系统特定内容。

相关内容