.bash_profile 没有来源

.bash_profile 没有来源

我有一个.bash_profile文件,我在里面添加了一些东西(别名和颜色以及一些 git 的东西),当我打开 iTerm 并获取它时,一切都很好,我拥有一切,但是当我关闭 iTerm 并重新打开它时,没有颜色,也没有别名,直到我再次获取它。

我应该怎么做才能永久地获得它?

是不是可能正在获取另一个文件?我该如何检查?

编辑:我检查了我的 iTerm 偏好设置,并且已选中“登录 shell”选项,所以我想当我打开 iTerm 时它应该会提供它。

答案1

您的终端 shell 也可能默认为 sh 而不是 bash。您可以先验证这一点:

 $ echo $SHELL
 /bin/tcsh

要将其更改为 bash,您可以进入终端 -> 首选项 -> 启动选项卡,然后将“Shell 打开方式:”从“默认登录 shell”更改为命令并将值更改为“/bin/bash”。

或者,您可以通过在命令提示符下执行以下命令来更改默认 shell:

chsh -s /bin/bash

完成上述任一操作后,打开一个新的 shell 窗口,然后应该获取 .bash_profile。

答案2

好吧,我深入研究了一下,它正在尝试获取源代码.profile,而我却得到了.bash_profile。所以我创建了一个~/.profile文件并将的内容复制.bash_profile到其中,然后 - 成功了!每当我启动 iTerm 或终端时,它都会被获取。

答案3

.profile.bash_profile类似的文件还有仅通过“登录” shell 获取。换句话说,只有当您登录系统时才会出现。因此,在那里设置别名是没有意义的。

仅保留环境变量(export命令)在 中.bash_profile。用于~/.bashrc其他一切。也从中获取.bash_profile

答案4

.bash_profile仅在登录 shell 上获取bash。任何桌面环境都不是登录 shell。当您打开终端窗口时(在 Linux 中,终端不会生成登录 shell),bash不会获取.bash_profile或获取。.profile

那么这些文件是如何以及何时获取的?您将如何解决这个问题,例如,在 Xorg 中.profile也没有获取来源?我知道这不是 Linux,但我想了解其他桌面环境如何处理这个问题。

在 Xorg 上,您.xsessionrc实际上应该 source 您的.profile,因为此文件仅在您的桌面启动时 source 一次。因此这是首选解决方案,因为您不需要 source.profile不必要的次数。

由此也可以看出,它.profile旨在作为一个地方,您可在此定义持久变量,这些变量可能永远不会改变,并且仍会传播到您的终端实例。更改.profile将需要您重新记录您的会话。

因此对于 Aqua(macOS 的桌面环境),执行相同操作是合乎逻辑的,但没有等效的。这可能是 MacOS在使用启动终端时.xsessionrc进行源代码管理的原因。它尚未在实际登录 Aqua 时进行源代码管理,因此新的终端窗口会生成登录 shell。.zprofilezsh

因此,您真正要做的就是更改默认 shell。我猜您只是将终端设置bash为通过初始命令打开。但这不会生成登录 shell,因此只会.bashrc生成源。

只需执行chsh -s /bin/bash并重新打开终端。现在它将尝试加载.bash_profile,如果缺少,它将获取.profile。但请注意,它不会.bashrc在登录 shell 上获取,因此您需要将其放在末尾.bash_profile

test ! -s "$HOME/.bashrc" || \. "$HOME/.bashrc"

现在有一个.bash_profile将导致bash不来源.profile,所以也把这个放在你的顶部.bash_profile

test ! -s "$HOME/.profile" || \. "$HOME/.profile"

我认为这是最佳解决方案,因为它的行为就像 Apple 决定的那样zsh。登录 shell 确实会随终端生成,并且桌面环境在整个会话期间无需获取任何内容。其他基于 unix 的发行版不会在其终端中生成登录 shell,但它们提供了一种在桌面环境启动时获取内容的方法。

它不太连贯,但了解其中的细微差别很重要。当您知道将什么放在哪里以及如何处理它时,您基本上可以进行可移植的配置。至少这是我切换回的动机bashzsh不是 Linux 发行版的默认 shell。

相关内容