【问题标题】:Simple configuration files template processor that preserves bash-style variables保留 bash 样式变量的简单配置文件模板处理器
【发布时间】:2020-10-10 00:08:24
【问题描述】:

我必须在已经包含类似 bash 的语法变量的文本配置文件(yaml、xml、json)上引入一些模板。我需要保留现有的类似 bash 的变量,但要替换我的变量。列表是动态的,变量应该来自环境。类似于采用“$${MY_VAR}}”模式但忽略 $MY_VAR 的简单处理器。最好是纯 Bash 或尽可能少的工具。

模式可以是 $$(VAR) 或任何可以轻松与 ${VAR} 和 $VAR 分开的东西。关键限制 - 它适用于 docker 容器启动过程,将环境变量注入提供的服务配置模板,并以此方式构建此配置。因此,Java 甚至 Perl 处理之类的东西都不是一种选择。

有人有简单的方法吗?

我在原始文件没有变量的情况下使用以下 bash 处理进行变量替换。但现在我需要更智能的东西。

# process input file ($1) placing output into ($2) with shell variables substitution.
process_file() {
set -e
eval "cat <<EOF
$(<$1)
EOF
" | cat > $2
}

【问题讨论】:

    标签: bash shell text-processing variable-substitution


    【解决方案1】:

    由于需要的软件包数量,对于 Docker 文件来说过于复杂的明显干净的解决方案:

    perl -p -i -e 's/\$\{\{([^}]+)\}\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < test.json
    

    这会过滤掉 ${{VAR}},甚至更好 - 只设置那些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2021-10-25
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      相关资源
      最近更新 更多