最终回到这个问题,只编译(不安装)你感兴趣的bash 版本相当简单。以下是我如何测试Bash 3.2.57:
$ mkdir ~/bash
$ cd ~/bash
$ wget http://ftp.gnu.org/gnu/bash/bash-3.2.57.tar.gz
$ tar xvzf bash-3.2.57.tar.gz
$ cd bash-3.2.57
$ ./configure
$ make
$ ./bash -version
GNU bash, version 3.2.57(1)-release (armv7l-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
现在你有一个bash 3.2.57的二进制文件可以运行,而不需要实际“安装”它或修改您的正常环境。
要对此版本运行shell脚本:
$ ./bash your_script.sh
进入干净的交互式提示符,请执行以下操作:
$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
bash-3.2$ bash -version
GNU bash, version 3.2.57(1)-release (armv7l-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
bash-3.2$
使用env -i
而不是直接调用./bash
,可以让你得到一个几乎为空的环境(在 shell 中运行env
以查看仍然设置了什么)。更新PATH
允许调用bash
(例如bash -version
)来调用本地的bash shell,而不是系统范围内的安装(但请注意,这会拉入你整个的PATH)。添加--noprofile --norc
避免加载你的.bashrc
和相关脚本。
如果你不想选择任何PATH
修改,只需在子shell中执行一次export PATH="$PWD:$PATH"
,而不是作为env
命令的一部分。
我有一个Docker镜像(repo)使用这些安装步骤,如果这对大家有帮助的话。我并不建议直接使用这个镜像,但你可以从Dockerfile/安装脚本中复制。采用MIT许可证。
/usr/local/bin
),然后编译和安装它 - 例如作为/usr/local/bin/bash-3.25
。然后,您可以使用bash-3.25
进行测试,而不仅仅是运行bash
。从Linux迁移到Mac时,您更大的问题可能是非GNU实用程序。如果您使用GNU扩展选项(与POSIX特别是相比 - 或者仅仅是那些Mac不支持的选项),即使Bash完全理解您所说的话,您也会遇到问题。小心sed
。 - Jonathan Leffler