我们在配置服务(如:nginx、filebeat...)的时候,经常使用模版,再从模版中生成服务应用的配置文件。如果变量比较少,我们一般使用sed处理。如果变量比较多,这时我们可以使用"envsubst"更加方便。
linux系统一般自带envsubst命令,macOS需要自己安装:
$ brew install gettext
使用例子:
1. 准备模版文件./templates.yml
systeminfo:
OS: $OS
user: ${USER}
home: ${HOME}
type: ${TYPE}
2. 执行脚本:
#!/usr/bin/env bash
export OS=$(uname -s)
cat ./templates.yml |envsubst >./envsubst-1.yml
生成的文件为:
$ cat ./envsubst-1.yml
systeminfo:
OS: Darwin
user: myuser
home: /Users/myuser
type:
3. 也可以换一种写法:
#!/usr/bin/env bash
export OS=$(uname -s)
envsubst <./templates.yml >./envsubst-2.yml
生成的文件为:
$ cat ./envsubst-2.yml
systeminfo:
OS: Darwin
user: myuser
home: /Users/myuser
type:
4. 只替换部分变量,把变量放置在下面的引号中,可以放置多个变量:
#!/usr/bin/env bash
export OS=$(uname -s)
envsubst '${OS}${HOME}' <./templates.yml >./envsubst-3.yml
生成的文件为:
$ cat ./envsubst-3.yml
systeminfo:
OS: Darwin
user: ${USER}
home: /Users/test
type: ${TYPE}