我目前有一个脚本,我正在使用多个函数来执行我自己的小型模板系统,该系统从 configs 目录中提取各种配置。我知道这是对 bash 脚本的更广泛的使用,大多数人会推动我在其中使用 python 或其他脚本语言。关于问题:
我有很多这样的功能
a() {}
b() {}
c() {}
...
我想要做的是定义一个全局常量,负责包含一个打开的缓冲区。这样,当这些函数之一开始通过读取循环修改配置时,我可以将一些逻辑传递给负责模板系统的其他函数(使用 format # % filename.to.use.as.a.template.conf % #
),同时仍然使用相同的缓冲区。我知道我可以创建一个临时文件并在那里写入我的配置第一的然后使用mv
覆盖,但我试图避免这种情况。
理想情况下,逻辑流程如下:
函数“A”正在对配置进行一些逻辑处理,然后它遇到标签“# % example.conf % #”,然后它将调用函数“B”,该函数负责加载模板,该模板查找缓冲区函数“A”正在处理并将模板内容“example.conf”附加到缓冲区,然后将其交还给“A”,然后“A”跳转到插入文本的末尾并继续解析文件。
伪代码实现示例:
install_template() {
local TEMPLATE_FILE
TEMPLATE_FILE = "${1}"
write_to_buffer "$(cat "${TEMPLATE_FILE}")" # This where I'm hung up at :/
}
while read -r line; do
if [[ line = *#*%*%*#*]]; then
install_template "${line}"
fi
done < "${CONFIGURATION}" > "${SOME_BUFFER}"
上面的伪代码的问题是我可以echo 函数中 cat 的输出install_template
,但问题是我的 echo 被读取循环捕获并输出到缓冲区,理想情况下我仍然能够记录STDOUT
没有它的情况全部被读循环捕获。
有没有一种好的方法可以做到这一点,或者至少有一种方法可以跟踪 A 正在处理的缓冲区,例如通过全局变量或另一个函数来写入该缓冲区而不捕获STDOUT
?