如何检查并列出 bash 脚本具有哪些外部依赖项?

如何检查并列出 bash 脚本具有哪些外部依赖项?

输出脚本使用的命令的列表 也许可以通过以下方式创建所用命令的列表:

set -n file_which_need_to_check.sh > found _commands.txt

或者通过以下内容:

compgen -c file_which_need_to_check.sh > found_commands.txt

或者通过以下方式:

shellcheck -x 或像这样:

已知且未要求提供以下信息:

包含路径的列表或者文件夹中的所有 bash 文件,可以按照以下方式获取:

find \ordnerpfad -type f

可以测试系统是否支持特定命令:

compgen -ac | grep searchstr

答案1

没有这样的工具(据我所知,也据我想象)。你需要运行脚本才能知道。特别大、复杂的脚本通常会检测系统上可用的内容(例如ggrep// egrep/ bsdgrep/ perl…,或gmakevs makevs bsdmakevs ninja),并执行不同的操作。

从软件的角度来看,需要运行的命令有时(通常,如果您正在查看安装程序和系统管理工具)是在脚本中“构建”的,因此在不运行源代码的情况下,您甚至不知道将运行的可执行文件。

因此,要知道这一点,您要么运行,要么需要为 shell 构建一个完整的代码分析器 - 这是一项非常复杂的工作,我无法想象有人会这样做,因为您所避免的就是运行记录不良的代码shell 脚本,直到失败(现在您可以在实际系统的容器化或虚拟机克隆上免费执行此操作)。
重新实现所有有问题的脚本,以便您知道自己所依赖的内容可能比编写这样的分析器要容易得多。

这一切都归结为作为脚本作者做好软件工程并在某处清楚地说明您的要求。

有些脚本使用其他工具,例如 xdotool,必须将其安装在计算机上才能运行脚本。

好吧,我希望您不是随机执行在互联网的某个黑暗角落找到的脚本!通常,脚本以某种形式的打包软件的形式出现。
例如,我确实从 /usr/bin 中随机选择了一个,/usr/bin/virt-copy-out我系统上的脚本来自libguestfsFedora 软件包。如果我问我的系统那个包依赖什么,会有一个更长的列表,包括bash(显然,它是一个bash脚本,没有bash就不会运行),coreutils(cp,sort,find…),,lesstar
因此,该包(和脚本)的作者花时间弄清楚该包(包括它包含的脚本)需要哪些东西。这就是您想要发行版软件包的(一个|原因)!如果在我尝试安装该软件包时缺少其中任何一个,我的软件包管理器将自动为我安装所有这些依赖项。

相关内容