AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 787581
Accepted
Gary U.U. Unixuser
Gary U.U. Unixuser
Asked: 2024-12-03 20:52:14 +0800 CST2024-12-03 20:52:14 +0800 CST 2024-12-03 20:52:14 +0800 CST

如何使用 Mac Ports Bash 代替 Apple 的 Bash?

  • 772

我在 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/binApple 的 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 / (_) | |  |   <\__ \
|_|\__|   \_/\_/ \___/|_|  |_|\_\___/
  

感谢大家!

bash
  • 2 2 个回答
  • 67 Views

2 个回答

  • Voted
  1. Best Answer
    Marc Wilson
    2024-12-05T01:08:34+08:002024-12-05T01:08:34+08:00

    您的第一个例子表明您的$PATH不正确。您正在运行bash5,可能是通过 的常规选项卡中的“打开方式的 Shell”设置明确启动它Terminal.app。但您尚未更新$PATH,因此bashshell 找到的 ,无论是通过明确执行它(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读取哪些文件的信息。

    您的第二个示例显示 MacPortsbash尚未添加到/etc/shells。错误消息清楚地表明您的登录 shell 尚未更改。

    MacPortsbash不会自行添加到/etc/shells。用户需要自行执行此操作。

    • 2
  2. Tim Kennedy
    2024-12-03T23:26:48+08:002024-12-03T23:26:48+08:00

    Apple 提供的 bash 版本确实非常旧,为 3.2.57(2014 年 11 月),而截至 2024 年 12 月的最新版本为 5.2.37(2024 年 9 月)。

    有几种方法可以更改 Mac OS 中的默认 shell。

    1. 您可以通过“设置”->“用户和组”-> 右键单击​​要更改的用户并选择“高级选项”菜单来更改它。在那里,您将看到一个名为的属性Login Shell,其中包含已知 shell 的列表,以及一个“选择”选项,该选项允许您导航到您选择的 shell(Macports Bash)并将其选为您的默认 shell。

    2. 如果您只想在终端应用中更改 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。

    • 0

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve