![.bash_profile 没有来源](https://linux22.com/image/1357391/.bash_profile%20%E6%B2%A1%E6%9C%89%E6%9D%A5%E6%BA%90.png)
我有一个.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。.zprofile
zsh
因此,您真正要做的就是更改默认 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,但它们提供了一种在桌面环境启动时获取内容的方法。
它不太连贯,但了解其中的细微差别很重要。当您知道将什么放在哪里以及如何处理它时,您基本上可以进行可移植的配置。至少这是我切换回的动机bash
。zsh
不是 Linux 发行版的默认 shell。