在 bash 脚本中多次获取文件

在 bash 脚本中多次获取文件

我有一个大型配置脚本(bash),它被很好地模块化为单独的函数,以完成一系列用于安装/配置软件套件的新部署的任务。

我们已经意识到,在不执行整个脚本的情况下调用其中一些函数将非常有用。我本可以让脚本接受一个参数来调用特定函数,但由于脚本已经增长到超过 1200 行,为了便于阅读,我打算将其拆分为将从父脚本执行的子脚本。目标是子脚本可以独立执行以重新配置特定的内容。

原始形式的父脚本(称为向导)具有多个全局变量,这些变量在脚本运行时由函数操作。为了拆分脚本,我为所有配置值创建一个持久文件,以及一个允许函数更新持久文件中的 key=value 对的函数(或者添加它们,如果它们不这样做)已经存在)。

好的,所以真正的问题! 由于向导是父脚本,并且子脚本(子脚本)可以在调用时编辑或添加配置值,因此向导是否可以通过向导的流程多次重新获取持久文件的来源(这是必要的)因为采购不会“向上”流动)?即,每当启动配置某个软件的向导功能时,它都会首先获取该文件,以防子脚本对配置值进行更改。

由于函数正在获取文件,我假设一旦函数完成,它就会超出范围(或者 bash 中的任何等效术语)。所以这不应该引起问题,但我很想确定。感谢您的任何建议!

**编辑:为了澄清,使用持久文件(以及为什么我这么称呼它)的主要原因是我希望它在单独调用子脚本之一时保持可用。如果向导没有设置全局变量,它们在独立运行时将丢失有关其环境的重要信息。

答案1

选择函数正常工作必须存在的一个(或多个)变量,并使用如下内容:

[ -z "$REQUIREDVARIABLE" ] && . persistent-file

或者

[ -z "$REQ1" ] || [ -z "$REQ2" ] || [ -z "$REQ3" ] && . persistent-file

这样,如果变量存在,源脚本将仅读取持久文件不是已经在环境中(当源自“向导”脚本时,它们将是并且保持最新)。


PS:在我看来,您应该使用 unix/linux 的打包工具来推出生产代码,而不是重新发明轮子。如果分发给第 3 方,则为您打算支持的所有 unix/linux 发行版进行打包。使用运行特定操作系统和版本的虚拟机来构建软件包。如果您的代码是开源的,那么如果其中一位开发人员觉得有用或有趣,各种发行版等将维护自己的软件包或端口。

相关内容