从内部脚本确定解释器

时间:2012-07-28 00:00:08

标签: linux bash interpreter

我有一个剧本;它需要使用bash的关联数组(相信我的那个)。

它需要在普通计算机上运行,​​以及某个具有/ bin / bash 3.2的附加计算机。

如果我将解释器声明为/opt/userwriteablefolder/bin/bash4,我放在那里的bash 4.2的位置,它可以正常工作..但它只适用于那台机器。

我想在我的脚本开头检查解释shell是什么,如果是bash3.2,则调用bash4 $0 $@。问题是我无法找出任何方法来确定解释shell是什么。我真的不愿意做一个基于$ HOSTNAME的决定,但是如果有必要的话会有效(这也很尴尬,因为它需要通过“我们已经完成这个”标志)。

由于一些原因,“只有两个脚本”并不是一个好的解决方案。

2 个答案:

答案 0 :(得分:5)

您可以通过查看$SHELL来查看使用的解释器,其中包含shell可执行文件的完整路径(例如/bin/bash

然后,如果是Bash,您可以通过各种方式检查Bash版本:

  • ${BASH_VERSINFO[*]} - 版本组件的数组,例如(4 1 5 1 release x86_64-pc-linux-gnu)
  • ${BASH_VERSION} - 字符串版本,例如4.1.5(1)-release
  • 当然还有"$0" --version

答案 1 :(得分:2)

这可能是一个选项,具体取决于您启动脚本的方式:

  1. 将bash 4.2安装为/opt/userwriteablefolder/bin/bash
  2. 使用'#!/ usr / bin / env bash'作为脚本中的shebang。
  3. 将'/ opt / userwriteablefolder / bin'添加到环境中PATH的前面  您的脚本被调用,因此如果存在,bash将被使用,否则  将使用常规bash
  4. 这样做的好处是可以避免在运行时检测bash的版本,但我意识到你的设置可能不会使第3步变得可取。