高级开发运维测试必须掌握的envsubst命令使用详解
目录
- 0 | 是什么
- 1 | 怎么用
- 2 | 举例说明
0 | 是什么
envsubst
缩写来自于 environment variable substitution
,即环境变量替换,是一个用于替换 shell 环境变量的工具。
它可以读取输入并在其中查找环境变量,然后将这些环境变量替换为其对应的值,最后输出结果。在linux和Unix操作系统上默认自带。
通过这个命令,我们可以配置一些模板文件,然后通过定义环境变量的方式,将变量传递到模板文件中,从而动态地生成配置文件。在 linux 运维里,属于比较高阶但是很实用的一个命令。
1 | 怎么用
Usage: envsubst [OPTION] [SHELL-FORMAT] Substitutes the values of environment variables. Operation mode: -v, --variables output the variables occurring in SHELL-FORMAT Informative output: -h, --help display this help and exit -V, --version output version information and exit In normal operation mode, standard input is copied to standard output, with references to environment variables of the form $VARIABLE or ${VARIABLE} being replaced with the corresponding values. If a SHELL-FORMAT is given, only those environment variables that are referenced in SHELL-FORMAT are substituted; otherwise all environment variables references occurring in standard开发者_Linux input are substituted. When --variables is used, standard input is ignored, and the output consists of the enhttp://www.devze.comvironment variables that are referenced in SHELL-FORMAT, one per line.
翻译一下:
在正常操作模式下,标准输入被复制到标准输出,对 $VARIABLE
或 ${VARIABLE}
形式的环境变量的引用被替换为相应的值。如果给出了 SHELL-FORMAT,则仅替换那些在 SHELL-FORMAT 中引用的环境变量;否则,标准输入中出现的所有环境变量引用都将被替换。
使用--variables
时,标准输入被忽略,输出由 SHELL-FORMAT 中引用的环境变量组成,每行一个。
2 | 举例说明
首先,假设我有一个模板文件如下:
$ cat envsubst-template.yaml apiVersion: v1 kind: Deploy metadata: name: 编程客栈$name namespace: $ns
接着,分几种 case 来使用 envsubst,以便于更好的理解。
- case 1 | envsubst-template 从 envsubst 里拿变量 name 和 ns 的值,然后将替换后的 yaml 重定向到 envsubst-1.yaml 里
$ name='hello' ns='world' envsubst < envsubst-template.yaml > envsubst-1.yaml $ cat envsubst-1.yaml apphpiVersion: v1 kind: Deploy metadata: name: hello namespace: world
注意, $ name='hello' ns='world' envsubst < envsubst-template.yaml > envsubst-1.yaml
也可以用export的方式定义:
$ export name='hello' $ export ns='world' $ envsubst < envsubst-template.yaml > envsubst-1.yaml
- case 2 | 和 case 1 不同的地方是指定了 SHELL-FORMAT 为
$name
, 意思是只将模板 yaml 里的$name
变量用 envsubst 传入的变量替换掉,其他($ns
)保持不变
$ name='hello' ns='phpworld' envsubst '$name'< envsubst-template.yaml > envsubst-2.yaml $ cat envsubst-2.yaml apiVersion: v1 kind: Deploy metadata: name: hello namespace: $ns
- case 3 | 主要展示的是 --variables 这个 option 的作用:可以看到http://www.devze.com,当加上了这个变量后,标准输入被忽略,输出由 SHELL-FORMAT 中引用的环境变量组成
$ name='hello' ns='world' envsubst --variables '$name'< envsubst-template.yaml > envsubst-3.yaml $ cat envsubst-3.yaml name
- case 4 | 主要展示的是 --variables 这个 option 的作用:可以看到,当加上了这个变量后,标准输入被忽略,输出由 SHELL-FORMAT 中引用的环境变量组成, 每行一个
$ name='hello' ns='world' envsubst --variables '$name,$ns'< envsubst-template.yaml > envsubst-4.yaml $ cat envsubst-4.yaml name ns
以上就是高级开发运维测试必须掌握的envsubst命令使用详解的详细内容,更多关于开发运维测试envsubst命令的资料请关注我们其它相关文章!
精彩评论