【问题标题】:Upgrade /bin/bash on MacOS to v5+将 MacOS 上的 /bin/bash 升级到 v5+
【发布时间】:2021-08-14 12:42:35
【问题描述】:

我正在尝试为 Kubeflow 安装安装 Anthos Service Mesh (ASM),并且需要 /bin/bash 为 v5+。 MacOS 附带 Bash v3.2.57,它不起作用。简单地在“/usr/local/bin”中安装 Bash v5+ 也不起作用,因为安装点的几个 shell 脚本指向“/b​​in/bash”,因此我仍然得到旧版本。

我曾希望我可以暂时将新的 bash v5+ 移动到“/bin/bash”,然后在完成 ASM 安装后恢复 - 如下所示:

>>>$sudo mv /bin/bash /bin/bash_old
>>>$sudo cp /usr/local/bin/bash /bin
>>>$make install_asm
>>>$sudo mv /bin/bash_old /bin/bash
>>>mv: rename /bin/bash to /bin/bash_old: Operation not permitted

所以这似乎是不可能的

解决此问题的最佳方法是什么?似乎只是为 .zshrc 添加一个别名似乎不起作用,希望每当我使用 "#!/bin/bash" 执行 shellscript 时,它实际上会调用 "/usr/local/bin/bash":

~/.zshrc:
alias /bin/bash="/usr/local/bin/bash"

>>>$/bin/bash --version
>>>GNU bash, version 5.1.8(1)-release (x86_64-apple-darwin19.6.0)

test_bash.sh:

#!/bin/bash
/bin/bash --version

>>>$sh ./test_bash.sh
>>>GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)

也许有一种方法可以让我按照上面的示例移动二进制文件?

顺便说一句,“/usr/local/bin/bash”已经是一个链接 - 不确定这是否对我正在尝试做的事情有任何影响。

>>>$ll /usr/local/bin/bash
>>>/usr/local/bin/bash -> ../Cellar/bash/5.1.8/bin/bash

热烈欢迎任何提示!

【问题讨论】:

  • @KamilCuk 如果shebangs说/bin/bash,那也无济于事
  • 传统方法是构建一个最小的chroot,您可以完全控制其中的/bin;但这些设置起来有点麻烦,我不确定它在 macOS 上的效果如何(尽管它似乎确实有 /usr/sbin/chroot 可用)。
  • 也许也可以研究一下 Docker,但我想如果您使用的是 Kubernetes,那么您已经很了解 Docker。
  • /bin 在 MacOS 中是只读的:apple.stackexchange.com/questions/193368/…
  • 您可能更容易在 ASM 中更改安装脚本:将 #!/bin/bash 更改为 #!/usr/bin/env bash 以便 /usr/local/bin/bash 在您的 PATH 中比 /bin/ 更早重击。

标签: bash macos kubeflow google-anthos


【解决方案1】:

我将我的新 shell 位置添加到/etc/shells 中的已批准 shell 列表中,然后使用以下方法更改我的用户的默认 shell:

chsh -s /path/to/new/bash/version

除了确保我的新 bash 位置被导出到我的路径的前面而不是结尾,因此寻找任何 bash 的命令首先会找到它:

export PATH=/opt/homebrew/bin/bash:$PATH

目前没有任何问题,但这是一台新机器,我刚刚开始安装它。如果您在任何 bash 启动脚本中设置了 SHELL 环境变量,请确保也将其更改为新的 bash 二进制文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2018-10-20
    • 1970-01-01
    • 2020-07-26
    • 2021-05-06
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多