乐趣区

关于后端:Linux-工具命令04-envsubst2-一个比-envsubst-更省心的配置渲染工具

Linux 工具命令(04): envsubst2 一个比 envsubst 更省心的配置渲染工具

如果在 公众号 文章发现状态为 已更新 ,倡议点击 查看原文 查看最新内容。

状态: 未更新

原文链接: https://typonotes.com/posts/2…

对于配置文件的渲染,通常咱们会应用 envsubst。这个工具基本上在 Linux 各个发行版上都能够通过官网源进行装置。

  1. 装置
# alpine
$ apk add --no-cache gettext

# ubuntu
$ apt instsall gettext
  1. 渲染

    • 默认模式 ,这种模式会替换所有 变量站位符 ,包含 $abc 或者 ${abc},如果变量不存在,则应用 空字符串 进行替换。
    • 白名单模式 ,这种模式能够指定 须要替换 白名单变量 。这种模式就是的麻烦点在于 当白名单变量 太多的时候,命令看起来就乱哄哄的。
$ envsubst < /path/2/template.txt > /path/2/target.txt
$ envsubst '${key1} ${key2}' < /path/2/template.txt > /path/2/target.txt

更多参考 Linux 工具命令(03): 应用 envsubst 渲染配置文件

为什么应用 envsubst2

应用 envsubst 进行模版渲染,如果要保留某些 变量格局的字符串,就有点麻烦了。如果你搞过 Nginx 的配置,应该就能了解我说的是什么状况。

server {
    listen  443;

    resolver  ${DNS_RESOLVER};  # 这里 ${DNS_RESOLVER} 须要替换
    # resolver  $DNS_RESOLVER;  # 另一个没有花括号的写法。location / {
        proxy_pass http://$host;  # 这里 $host 不须要替换
        proxy_set_header Host $host;
    }
}

如果是用 envsubst 替换,

  1. 白名单模式,指定 ${DNS_RESOLVER} 替换。

    • 1. 须要替换的变量多2. 须要替换的变量随时可能变 的时候,保护起来就会很麻烦。
  2. 或者 本义 不须要被替换的的 $ 符号。例如 \$host.

    • 这样保护模版就会十分的麻烦。

咱们的工作,须要 更简略 更通用 更无脑。不应该在这些琐碎的事件上浪费时间。

于是便又了 envsubst2

envsubst2 的应用形式

envsubst2 应用了 ${[a-zA-Z0-9_]+} 作为正则匹配的 模版 。意味着, 只有相似 ${key1} 这种带有花括号的变量才会被渲染

这样做,

  1. 兼容 envsubst 的应用应用,迁徙过去更不便。
  2. 缩小认知压力,不必在放心 $key1${key1} 这样 有没有花括号 的问题了。

默认状况下,envsubst2 只会读取 存在 环境变量 进行替换。如果 变量存在,且值为空 也会替换。

留神 :变量 不存在 值为空 是两种不同的状态。

$ envsubst2 -h
version: v0.1.8+sha.5acb37b-devel

Usage:
  envsubst2 [flags]

Flags:
      --force-replace   replace all the placeholders, even if their value is empty (default true)
  -h, --help            help for envsubst2
      --input string    input file
      --output string   output file, os.Stdout if empty.

以后版本,反对以上 3 个参数

  1. --input: 输出文件(模版文件)。
  2. --outpu: 输入文件,内容保留的中央。如果没有指定,则为 屏幕规范输入
  3. --force-replace: 强制替换所有变量,即便变量值为空 或者 没有被设置
  4. 默认 替换所有 ${key1},不管其值是否为空。

    • 然而能够通过开关 --force-update=false 敞开。当敞开状态时,${key1} 值为空时 不替换,即在文件中保留字面值。

Demo 案例

模版

My home path is ${HOME}.
My user is ${USER}.

This variables doesn't exist: ${DONT_EXIST}
This variables is empty: ${EMPTY}

渲染

$ EMPTY="" ./envsubst2 --input template.txt --force-replace=false

后果

My home path is /Users/devops.
My user is devops.

This variables doesn't exist: ${DONT_EXIST}
This variables is empty: 

下载地址

在 Github 上:https://github.com/tangx/envs…

相互吹捧,共同进步

欢送和我一起学习提高,如果有什么问题,能够给我私信留言。或者

  1. 加我好友 线下探讨。
  2. 关注我的 公众号 – 老麦胖熊猫 或者 B 站账户 – 老麦胖熊猫 订阅最新文章和更多精彩内容
退出移动版