envsubst命令怎么使用

其他教程   发布日期:2025年02月21日   浏览次数:206

这篇文章主要介绍“envsubst命令怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“envsubst命令怎么使用”文章能帮助大家解决问题。

0 | 是什么

  1. envsubst
缩写来自于
  1. environment variable substitution
,即环境变量替换,是一个用于替换 shell 环境变量的工具。

它可以读取输入并在其中查找环境变量,然后将这些环境变量替换为其对应的值,最后输出结果。在Linux和Unix操作系统上默认自带。

通过这个命令,我们可以配置一些模板文件,然后通过定义环境变量的方式,将变量传递到模板文件中,从而动态地生成配置文件。在 linux 运维里,属于比较高阶但是很实用的一个命令。

1 | 怎么用

  1. Usage: envsubst [OPTION] [SHELL-FORMAT]
  2. Substitutes the values of environment variables.
  3. Operation mode:
  4. -v, --variables output the variables occurring in SHELL-FORMAT
  5. Informative output:
  6. -h, --help display this help and exit
  7. -V, --version output version information and exit
  8. In normal operation mode, standard input is copied to standard output,
  9. with references to environment variables of the form $VARIABLE or ${VARIABLE}
  10. being replaced with the corresponding values. If a SHELL-FORMAT is given,
  11. only those environment variables that are referenced in SHELL-FORMAT are
  12. substituted; otherwise all environment variables references occurring in
  13. standard input are substituted.
  14. When --variables is used, standard input is ignored, and the output consists
  15. of the environment variables that are referenced in SHELL-FORMAT, one per line.

翻译一下:

在正常操作模式下,标准输入被复制到标准输出,对

  1. $VARIABLE
  1. ${VARIABLE}
形式的环境变量的引用被替换为相应的值。如果给出了 SHELL-FORMAT,则仅替换那些在 SHELL-FORMAT 中引用的环境变量;否则,标准输入中出现的所有环境变量引用都将被替换。

使用

  1. --variables
时,标准输入被忽略,输出由 SHELL-FORMAT 中引用的环境变量组成,每行一个。

2 | 举例说明

首先,假设我有一个模板文件如下:

  1. $ cat envsubst-template.yaml
  2. apiVersion: v1
  3. kind: Deploy
  4. metadata:
  5. name: $name
  6. namespace: $ns

接着,分几种 case 来使用 envsubst,以便于更好的理解。

  • case 1 | envsubst-template 从 envsubst 里拿变量 name 和 ns 的值,然后将替换后的 yaml 重定向到 envsubst-1.yaml 里

  1. $ name='hello' ns='world' envsubst < envsubst-template.yaml > envsubst-1.yaml
  2. $ cat envsubst-1.yaml
  3. apiVersion: v1
  4. kind: Deploy
  5. metadata:
  6. name: hello
  7. namespace: world

注意,

  1. $ name='hello' ns='world' envsubst < envsubst-template.yaml > envsubst-1.yaml
也可以用export的方式定义:
  1. $ export name='hello'
  2. $ export ns='world'
  3. $ envsubst < envsubst-template.yaml > envsubst-1.yaml
  • case 2 | 和 case 1 不同的地方是指定了 SHELL-FORMAT 为

    1. $name
    , 意思是只将模板 yaml 里的
    1. $name
    变量用 envsubst 传入的变量替换掉,其他(
    1. $ns
    )保持不变
  1. $ name='hello' ns='world' envsubst '$name'< envsubst-template.yaml > envsubst-2.yaml
  2. $ cat envsubst-2.yaml
  3. apiVersion: v1
  4. kind: Deploy
  5. metadata:
  6. name: hello
  7. namespace: $ns
  • case 3 | 主要展示的是 --variables 这个 option 的作用:可以看到,当加上了这个变量后,标准输入被忽略,输出由 SHELL-FORMAT 中引用的环境变量组成

  1. $ name='hello' ns='world' envsubst --variables '$name'&lt; envsubst-template.yaml &gt; envsubst-3.yaml
  2. $ cat envsubst-3.yaml
  3. name
  • case 4 | 主要展示的是 --variables 这个 option 的作用:可以看到,当加上了这个变量后,标准输入被忽略,输出由 SHELL-FORMAT 中引用的环境变量组成, 每行一个

  1. $ name='hello' ns='world' envsubst --variables '$name,$ns'< envsubst-template.yaml > envsubst-4.yaml
  2. $ cat envsubst-4.yaml
  3. name
  4. ns

以上就是envsubst命令怎么使用的详细内容,更多关于envsubst命令怎么使用的资料请关注九品源码其它相关文章!