找出脚本需要什么版本的BASH

时间:2017-08-15 12:36:23

标签: bash shell static-analysis

我编写了一个shell脚本,它使用了一些BASH特定命令,例如[[ ... ]]。我知道一些BASH功能仅适用于BASH 4或更新版本。如何在不尝试多种不同版本的情况下找出此脚本所需的BASH版本?

是否有某种工具可以检查所需的最低版本?

源代码可在GitHub的https://github.com/JEFF-Media-GbR/RandomRound/blob/master/randomround

上找到

2 个答案:

答案 0 :(得分:3)

有大量资源需要检查a)特定Bash功能的介绍和b)一般的Bashisms:

这些都可用于确定何时引入功能。

对于Bashisms列表,Bash手册描述了Appendix B中与Bourne Shell的差异(“与Bourne Shell的主要区别”),并且在Wooledge wiki上有文章How to make bash scripts work in dash

我不知道“野外”版本的分布是什么,但如果您的用户群包含macOS用户,请注意他们使用Bash 3.2,除非他们使用Homebrew或类似版本升级。

至于以编程方式确定运行特定脚本所需的Bash版本,我不知道有任何工具可以执行此操作。 Shellcheck有些接近,因为当你的脚本以#!/bin/sh开头时,它可以警告Bashisms。

答案 1 :(得分:0)

你所要求的是无法做到的。这是主要无法解决的编程问题之一。一个(但不是唯一的)原因是脚本可能在运行时构造一个字符串并对其进行评估,并且您无法通过自动方式分析任意程序,它将产生哪些数据。