在 macOS 12.x 上安装最新的 bash

installing latest bash on macos 12.x

我正在尝试 cp 命令 运行 在 ubuntu 20 下可以正常工作,即

(base) jr@Historys-MacBook-Air test % cp --backup=numbered src dest
cp: illegal option -- -

这让我觉得很奇怪,所以查看我看到的手册页

HISTORY
     A cp command appeared in Version 1 AT&T UNIX.
macOS 12.0                                                       February 23, 2005                                                       

我认为 shell 可能是罪魁祸首 - 我发现我在 zsh

(base) jr@Historys-MacBook-Air test % echo [=14=]
-zsh

当我在 bash 中启动终端时,它是一个旧版本:

(base) jr@Historys-MacBook-Air test % /bin/bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin21)
Copyright (C) 2007 Free Software Foundation, Inc.

所以我尝试 brew install 最新的,然后 chsh 到它但是得到了 'non-standard shell':

...
==> Pouring bash--5.1.16.arm64_monterey.bottle.tar.gz
  /opt/homebrew/Cellar/bash/5.1.16: 157 files, 11.5MB
(base) jr@Historys-MacBook-Air test % /opt/homebrew/Cellar/bash/5.1.16/bin/bash --version
GNU bash, version 5.1.16(1)-release (aarch64-apple-darwin21.1.0)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

(base) jr@Historys-MacBook-Air test % chsh -s /opt/homebrew/Cellar/bash/5.1.16/bin/bash
Changing shell for jr.
Password for jr:
chsh: /opt/homebrew/Cellar/bash/5.1.16/bin/bash: non-standard shell

任何人都可以指出如何 a. 运行 5.1.16 bash and/or b.在 mac os12 上使用 cp --backup=numbered(and/or c. 权衡 bash 版本是否破坏了我的 cp 命令?)

回答你的三个问题:

  1. /opt/homebrew/Cellar/bash/5.1.16/bin/bash(或者更好,opt/local/bin/bash 这是它的符号链接)添加到 /etc/shells
  2. macOS 附带的 cp 版本与 GNU 版本不同。它缺少 --backup=numbered 选项。您需要从 Homebrew 安装 GNU Coreutils 以获得您想要的行为。 GNU cp 命令将以 g 作为 GNU cp.
  3. gcp 前缀
  4. bashzsh 版本都与 cp 命令的选项或行为没有任何关系。