如何在一台机器上运行一个 shell 的多个版本

ico*_*ast 6 shell software-installation

为了在尽可能多的环境中测试一些脚本1,我使用 UNIX(或类 Unix 操作系统)设置了几个 VM:

  • Linux
  • 索拉里斯
  • 操作系统 X 2
  • FreeBSD

不过,我认为,在许多方面,使用我计划关心的每个 shell 的不同版本进行测试实际上比使用不同的操作系统进行测试更重要。

因为我不想让我的虚拟机以看似无穷无尽的排列方式成倍增加,所以我想在任何给定的虚拟机上安装每个 shell 的多个版本。例如,如果我在下面[:bash,:zsh,:fish,:ksh,:csh,:tcsh,:sh,:dash,:ash]进行测试,那么我有 9 个 shell,如果您假设我正在测试每个的平均 3 个版本,那么我有超过 100 个 VM:

# operating_systems * shells * shell_versions
            4       *   9    *     3
Run Code Online (Sandbox Code Playgroud)

是否有任何实用的方法可以在单台机器或虚拟机上安装和使用给定 shell 的多个版本?我可以(例如)在一台 Linux VM 上安装 Bash 1、Bash 2、Bash 3 和 Bash 4 吗?

我意识到

  1. 一些组合不太重要,可能可以忽略,并且
  2. 最终我还想测试每个操作系统的多个版本,

但这些与这个问题实际上是分开的,所以我把这些问题放在一边来考虑这是否可行:

那么:有没有什么实用的方法可以在一台机器上安装和使用给定 shell 的多个版本?


1 我松散地使用术语“脚本”。的第一件事情,我想测试的东西,将通过一个的shell源rc文件,不管是.zshrc.bash_profile或什么的,所以不会有自己的家当线。因此,希望让一点代码跨多个 shell 工作。其他跨 shell 有用的东西是我想在不同机器上使用的函数和别名,尽管它们不一定都有我最喜欢的 shell (Z Shell),但可能会让我使用 Bash 或 Korn。还有我可能想在多台机器上的 shell 脚本中使用的任何有用的片段,即使我不能把我最喜欢的 shell 放在 shebang 行中。

2 完全切题,只是为了不说任何误导性的内容:我实际上还没有设置 OS X VM,因为这很麻烦,但我希望,并将其包含在列表中,所以没有人会说“嘿!你为什么不包括 OS X!?”

Zan*_*hey 5

如果您乐于从源代码构建,您可以将每个版本安装到单独的前缀中,然后相应地调整脚本中的路径。

bash、fish、ksh、tcsh、zsh 和 dash 都支持--prefix配置参数,所以你可以下载每个版本,运行./configure --prefix=/opt/SHELL-VERSION; make; make install. 然后要使用每个版本,将 PATH 设置为/opt/SHELL-VERSION/bin在前面。

csh 有点不同,需要更多的手动工作;如果您确定需要它,您可以从 FreeBSD 源代码树中提取源代码并编辑 Makefile,但大多数人实际上仍然使用 tcsh。

我不认为灰烬有一个规范的来源,但它可能会有类似的处理方式。