Mac:虚拟Shell Bash版本与安装的版本不匹配



我正在尝试创建利用Bash 4.0功能的shell脚本。我在Mac上使用zshell作为我的主外壳,我通过Homebrew安装了bash 4.0。

当我从iTerm运行bash --version时,我得到:

GNU bash, version 4.4.23(1)-release (x86_64-apple-darwin17.5.0)
Copyright (C) 2016 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.

但是,如果我尝试从脚本中执行echo "Using $BASH_VERSION",我会得到:Using version 3.2.57(1)-release

如何使脚本的虚拟shell指向Bash 4.0?

自制软件/usr/local/bin中为其安装的所有内容创建符号链接,因此如果您想使用国产软件-提供的bash,请使用:

#!/usr/local/bin/bash
...
...

如果您想查看符号链接及其指向的位置:

ls -l /usr/local/bin/bash
lrwxr-xr-x  1 mark  admin  30 Mar 20 17:16 /usr/local/bin/bash -> ../Cellar/bash/4.4.19/bin/bash

如果您想要有关自制bash的信息,请使用:

brew info bash

如果你想把它用作登录外壳(我个人不喜欢这个想法(,你需要把它添加到/etc/shells中并使用chsh命令。

$ echo /usr/local/bin/bash | sudo tee -a /etc/shells
$ chsh -s /usr/local/bin/bash

然后打开一个新的终端窗口,通过执行来验证它是否工作

$ echo $BASH_VERSION

您的shell脚本应该以以下行开始:

#!/<path>/bash

它应该指向您想要的已安装bash。由于您似乎在与通过执行bash --version找到的bash作斗争,因此可以执行which bash来告诉您那个bash在哪里。

或者,您可以使用以下命令启动脚本:

#!/usr/bin/env bash

它将使用PATH中的bash。

最新更新