我在 10.15 Catalina 上安装了 Mac Ports 及其 bash 版本,但当我打开终端时,仍然看到 Apple 的旧 bash 版本,并且我已安装的所有 Mac 端口都不见了。它们在那里,但只在新 bash 版本中。
(1)在Apple的“系统偏好设置”的“用户和组”的“高级”部分中,我插入了Mac Ports bash路径/opt/local/bin/bash
,但它没有任何效果。
(2)将终端偏好设置更改为/opt/local/bin/bash
(参见下面 Tim Kennedy 的建议)也没有任何效果。
这是应用这两项更改之后的情况:
$ echo $BASH_VERSION
5.2.32(1)-release
$ bash -version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
$ which bash
/bin/bash
还有一篇相关文章 «再次… bash 版本 mac 没有变化»,但它涵盖的是 Homebrew 版本而不是 Mac Ports,而且也没有解决这个问题。但它确实包含了一些其他有用的信息。
(3)应用上述文章的解决方案也无效:
$ chsh -s /opt/local/bin/bash
Changing shell for admin.
Password for admin:
chsh: /opt/local/bin/bash: non-standard shell
$ which bash
/bin/bash
(4)编辑文件的建议/etc/shells
也没有效果。
最后,Marc Wilson 关于 $PATH 的建议(见下文)让我找到了解决方案。我/etc/paths
最初的想法是这样的:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
当我将 Mac Ports 目录放在/opt/local/bin
Apple 的 bash 位置之前时/bin
,使用sudo vi /etc/paths
,我终于成功了。现在,打开终端时,我得到:
$ echo $BASH_VERSION
5.2.32(1)-release
$ bash -version
GNU bash, version 5.2.32(1)-release (x86_64-apple-darwin19.6.0)
$ which bash
/opt/local/bin/bash
$ figlet it works
_ _ _
(_) |_ __ _____ _ __| | _____
| | __| \ \ /\ / / _ \| '__| |/ / __|
| | |_ \ V V / (_) | | | <\__ \
|_|\__| \_/\_/ \___/|_| |_|\_\___/
感谢大家!
您的第一个例子表明您的
$PATH
不正确。您正在运行bash5
,可能是通过 的常规选项卡中的“打开方式的 Shell”设置明确启动它Terminal.app
。但您尚未更新$PATH
,因此bash
shell 找到的 ,无论是通过明确执行它(bash --version
),还是通过使用which
,都是 中的/bin
。Bash5
并bash3
读取相同的配置文件。您需要确保已将更新放在$PATH
正确的文件中,以确保$PATH
已更新。如果 shell 作为登录 shell 执行,则它应该在 中$HOME/.bash_profile
。如果 shell 作为非登录 shell 执行,则该$PATH
更新应该在 中$HOME/.bashrc
。由于
bash5
和bash3
不相同$PATH
(您的陈述“它们存在,但仅在新 bash 版本中”),一个作为登录 shell 执行,而另一个则不是。阅读手册页的 INVOCATION 部分
bash
(bash3
或bash5
,重要信息相同)以获取有关何时bash
读取哪些文件的信息。您的第二个示例显示 MacPorts
bash
尚未添加到/etc/shells
。错误消息清楚地表明您的登录 shell 尚未更改。MacPorts
bash
不会自行添加到/etc/shells
。用户需要自行执行此操作。Apple 提供的 bash 版本确实非常旧,为 3.2.57(2014 年 11 月),而截至 2024 年 12 月的最新版本为 5.2.37(2024 年 9 月)。
有几种方法可以更改 Mac OS 中的默认 shell。
您可以通过“设置”->“用户和组”-> 右键单击要更改的用户并选择“高级选项”菜单来更改它。在那里,您将看到一个名为的属性
Login Shell
,其中包含已知 shell 的列表,以及一个“选择”选项,该选项允许您导航到您选择的 shell(Macports Bash)并将其选为您的默认 shell。如果您只想在终端应用中更改 shell,请打开终端应用,然后在上方菜单栏中选择终端 -> 设置,然后单击常规。在该窗口的中间,您将看到一个标签
Shells open with:
。您可以选择Default login shell
默认的,也可以选择其他 shell,例如 Macports Bash。选项 1 的优点是它会更改每个打开终端的应用程序的默认 shell。Terminal、iTerm2、VScode 等。缺点是它会在所有地方更改您的默认 shell,并且可能会产生意想不到的后果,具体取决于 shell 的选择。
bash
更改默认登录 shell 绝对安全。选项 2 的优点是您可以拥有更大的灵活性。您可以让终端应用使用默认 shell,即
zsh
,然后安装 iTerm2 并让其使用 bash。同时让 VScode 使用pwsh
。您还可以将终端应用设置为具有不同的配置文件,每个配置文件启动不同的 shell。例如,我有一个使用深蓝色背景、浅灰色前景的 Powershell 配置文件,用于启动 shell ,还有一个在 Solarized Dark 彩色窗口中pwsh
启动 shell 的 ZSH 配置文件。zsh
bash
实际上,选项 2 没有任何缺点,除了在尚未配置使用的应用程序中打开会带来一些不便之外bash
。