Bashrc、 . bash_profile 和. environment 之间的区别是什么?

这些年来,我使用过许多不同的基于 * nix 的系统,似乎我使用的每种 Bash 都有不同的算法来决定运行哪些启动脚本。对于像设置环境变量和别名以及打印启动消息(例如 MOTD)这样的任务,哪个启动脚本是执行这些任务的合适位置?

把东西放在 .bashrc.bash_profile.environment中有什么区别?我还看到了其他文件,如 .login.bash_login.profile; 这些文件有关联吗?在物理登录、通过 ssh 远程登录和打开一个新的终端窗口时,运行这些程序的区别是什么?不同平台(包括 Mac OS X (及其 Terminal. app)和 Cygwin Bash)之间是否存在显著差异?

518661 次浏览

我找到了关于. bashrc 和. bash _ profile 给你的信息来总结它:

时执行. bash _ profile 登录,你放进去的东西可能是 你的路径和其他重要的 环境变量。

Bashrc 用于非登录 shell。 - 我不知道那是什么意思-我知道 那个红帽子 每次开始都会执行 另一个 shell (对此用户通过 su 或 简单地再次调用 bash) 想在里面加上化名 我不知道那是什么意思 我自己就无视它。

. profile 相当于 . bash _ profile 用于根目录 名称更改为让其他 Shell (csh、 sh、 tcsh)也使用它。 (你不需要一个用户)

还有. bash _ logout wich 执行,猜对了... 注销。 你也许想阻止恶魔,甚至 做点家务,你可以的 如果你愿意,也可以在这里添加“ clear” 退出时清除屏幕。

还有对每个配置文件 给你的完整跟踪

它们甚至可能与发行版本相关,并非所有的发行版本都选择使用每个配置,有些甚至有更多的配置。但是当他们有相同的名字,他们通常包括相同的内容。

一个很好的查看地方是 bash 的手册页。 给你是一个在线版本。查找“ INVOCATION”部分。

通常,~/.profile由 Bourne Shell 使用,并且可能作为遗留度量标准得到 Bash 的支持。同样,C Shell 使用了 ~/.login~/.cshrc-我不确定 Bash 是否使用了它们。

~/.bash_profile将在登录时使用一次。每次启动 shell 时都会读取 ~/.bashrc脚本。这类似于 C Shell 的 /.cshrc

结果之一是,~/.bashrc中的内容应该尽可能轻量级(最小) ,以减少启动非登录 shell 时的开销。

我相信 ~/.environment文件是 Korn Shell 的兼容文件。

Shell 配置文件的主要区别在于,有些只能由“ login”shell 读取(例如,当您从另一台主机登录时,或者在本地 unix 机器的文本控制台登录时)。它们被称为 .login.profile.zlogin(取决于您使用的 shell)。

然后配置文件由“交互式”外壳程序读取(比如,连接到终端的外壳程序(或者,比如,在虚拟终端视窗系统下运行的外壳程序的情况下,连接到伪终端的外壳程序)。它们的名字有 .bashrc.tcshrc.zshrc等等。

因为 .bashrc只能由同时具有 < em > 交互式 和 < em > 非登录 的 shell 读取,所以 bash使这个问题复杂化了,所以你会发现大多数人最后都会告诉他们的 .bash_profile也读 .bashrc

[[ -r ~/.bashrc ]] && . ~/.bashrc

其他 shell 的行为不同-例如,对于交互式 shell,无论是否登录,总是读取 .zshrc

Bash 的手册页解释了读取每个文件的情况。是的,机器之间的行为通常是一致的。

.profile只是 /bin/sh最初使用的登录脚本文件名。bash通常与 /bin/sh向后兼容,如果存在 .profile,它将读取 .profile

这很简单,在 man bash中有解释:

/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file

Loginshell 是在您登录时读取的(例如,当仅仅启动 xterm 时,它们不会被执行)。还有其他登录方式。例如,使用 X 显示管理器。它们还有其他方法在登录时读取和导出环境变量。

同时阅读手册中的 INVOCATION章节。它说 “以下段落描述 bash 如何执行其启动文件。”,我认为这是一个正确的:)它解释了什么是一个“交互式”外壳也。

Bash 不知道 .environment。我怀疑这是您的发行版的一个文件,用于设置独立于您所驱动的 shell 的环境变量。

根据 Josh Staiger,Mac OS X 的 Terminal. app 实际上为每个新的终端窗口运行一个登录 shell,而不是默认情况下的非登录 shell。而不是 bash _ profile。巴希尔。

他建议:

大多数情况下,您不希望维护两个独立的配置文件 用于登录和非登录 shell ーー当您设置 PATH 时,您希望它 您可以通过从您的 . bash _ profile 文件,然后在. bashrc 中放入 PATH 和常用设置。

为此,将以下代码行添加到. bash _ profile:

if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

现在,当您登录到您的 机器从控制台。 bashrc 将被调用。

我使用过 Debian-family 发行版,它似乎执行 .profile,但不执行 .bash_profile, 而 RHEL 衍生物在 .profile之前执行 .bash_profile

当您必须设置在任何 Linux 操作系统中工作的环境变量时,似乎是一团糟。