首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从脚本内部确定解释器

从脚本内部确定解释器
EN

Stack Overflow用户
提问于 2012-07-28 08:00:08
回答 2查看 3.4K关注 0票数 5

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

它需要在普通机器上运行,也需要在安装了/bin/bash3.2的其他机器上运行。

如果我声明解释器是/opt/userwriteablefolder/bin/bash4,也就是我放在那里的bash4.2的位置,它就可以正常工作。但它只能在那台机器上工作。

我想在我的脚本开头做一个测试,检查解释外壳是什么,如果是bash3.2,就调用bash4 $0 $@。问题是我想不出任何方法来确定解释shell是什么。我真的不想做基于$HOSTNAME的决定,但如果有必要的话,这会起作用的(这也很尴尬,因为它需要传递一个“我们已经做了这件事”的标志)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-28 08:03:44

您可以通过查看$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
  • And,"$0" --version
票数 2
EN

Stack Overflow用户

发布于 2012-07-28 08:21:40

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

  1. 将bash 4.2安装为/opt/userwriteablefolder/bin/bash.
  2. Use '#!/usr/bin/env bash‘作为脚本中的
  3. 在调用脚本的环境中,将'/opt/userwriteablefolder/bin’添加到PATH的前面,这样就会使用其中的bash (如果存在),否则将使用常规bash

这样做的好处是避免了在运行时检测bash的版本,但我意识到您的设置可能不会使步骤3变得可取。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11697076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档