所以我对 Linux 还是很陌生,最近在我的上网本上安装了 Fedora 19。我想更深入地了解 Linux 和 CLI,所以我现在正在阅读Learn Linux: The Hard Way。
在练习 3 中,作者给出了以下命令:
我尝试按照这些说明进行操作,但无济于事。从 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工作,因为它可能有你的安装需要的系统特定的东西。