是否可以模拟旧版本的 Bash?

And*_*eno 5 bash testing

是否可以效仿(这是正确的词吗?)以前版本的 Bash?

我使用的是 4.3.11,我很想知道我的脚本是否与某些早期版本兼容,但我不想实际安装早期版本。我可以翻阅更改日志并找出我正在使用的以前版本缺少的功能,但这似乎有点乏味。我希望有某种神奇的命令行选项或脚本命令(可能是一厢情愿)。

Gil*_*il' 5

不,bash 无法模拟旧版本的 bash。但是设置一个包含旧版 bash 的测试环境非常容易。

如果您必须手动安装每个软件包,那么安装旧版本的单个软件会很乏味,更不用说解决库不兼容问题了。但是有一个更简单的解决方案:安装较旧的发行版。安装一个较旧的发行版,带有一套一致的软件,包括开发包,需要大约 1 美元的硬盘空间,第一次设置可能需要一个小时。

schroot包可以很容易地安装是一样的系统作为正常的Linux系统上运行旧的(或更新版本!)的Linux发行版。您可以轻松地进行 schroot 设置,在该设置中您可以在系统目录指向旧软件的环境 ( chroot ) 中运行程序,但主目录是正常环境的主目录。我为基于 Debian 的发行版编写了指南;您可以通过这种方式轻松返回 Debian slink(使用 bash 2.01.01)。

如果您想使用不同的 Unix 变体、不同的 CPU 架构或非常非常旧的软件进行测试,您可以在虚拟机中运行其他操作系统。有更多的开销(在 RAM、磁盘空间、CPU 和维护方面),但它仍然非常可行。


Bra*_*rks 5

您可以轻松地在 docker 容器中测试任何版本的 bash。

你可以启动一个运行 bash 3.2 的 docker 容器,如下所示:

$ docker run -it bash:3.2 
Run Code Online (Sandbox Code Playgroud)

您可以在 docker 中挂载一个文件夹,这样您就可以轻松地在 docker 容器中测试您机器上的脚本。以下内容将允许该文件夹/Users/myuser在 docker 容器中可用:/myuser

$ docker run -v /Users/myuser/:/myuser -it bash:3.2 
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用此处列出的任何 bash 版本:

https://hub.docker.com/_/bash

这些图像的来源可以在这里找到:

https://github.com/tianon/docker-bash/