Linux 工具命令(04): envsubst2 一个比 envsubst 更省心的配置渲染工具
如果在 公众号 文章发现状态为 已更新, 倡议点击 查看原文 查看最新内容。
状态: 未更新
原文链接: https://typonotes.com/posts/2...
对于配置文件的渲染, 通常咱们会应用 envsubst
。 这个工具基本上在 Linux 各个发行版上都能够通过官网源进行装置。
- 装置
# alpine$ apk add --no-cache gettext# ubuntu$ apt instsall gettext
渲染
- 默认模式, 这种模式会替换所有 变量站位符, 包含
$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
替换,
白名单模式, 指定
${DNS_RESOLVER}
替换。- 当 1. 须要替换的变量多, 2. 须要替换的变量随时可能变 的时候, 保护起来就会很麻烦。
或者 本义 不须要被替换的的
$
符号。 例如\$host
.- 这样保护模版就会十分的麻烦。
咱们的工作, 须要 更简略, 更通用, 更无脑。 不应该在这些琐碎的事件上浪费时间。
于是便又了 envsubst2
。
envsubst2
的应用形式
envsubst2
应用了 ${[a-zA-Z0-9_]+}
作为正则匹配的 模版。 意味着, 只有相似 ${key1}
这种带有花括号的变量才会被渲染
这样做,
- 兼容
envsubst
的应用应用, 迁徙过去更不便。 - 缩小认知压力, 不必在放心
$key1
和${key1}
这样 有没有花括号 的问题了。
默认状况下, envsubst2
只会读取 存在 的 环境变量 进行替换。 如果 变量存在, 且值为空 也会替换。
留神: 变量 不存在 和 值为空 是两种不同的状态。
$ envsubst2 -hversion: v0.1.8+sha.5acb37b-develUsage: 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 个参数
--input
: 输出文件(模版文件)。--outpu
: 输入文件, 内容保留的中央。 如果没有指定, 则为 屏幕规范输入。--force-replace
: 强制替换所有变量, 即便变量值为空 或者 没有被设置。默认 替换所有
${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...
相互吹捧, 共同进步
欢送和我一起学习提高, 如果有什么问题, 能够给我私信留言。 或者
- 加我好友 线下探讨。
- 关注我的 公众号 - 老麦胖熊猫 或者 B站账户 - 老麦胖熊猫 订阅最新文章和更多精彩内容