「Shell」- 使用环境变量,替换在文件中的变量(envsubst)

  CREATED BY JENKINSBOT

问题描述

在部署服务时,脚本的部分内容是是动态生成的。我们可以使用 sed 进行替换,但是我们发现了更好的方法。

通过使用 envsubst 命令,可以替换在文件中的变量引用(类似于其他编程的模板引擎)。

该笔记将记录:如何使用 envsubst 替换文件中的变量,来动态生成文件内容的方法。

解决方案

对于如下文件模板:

# example.txt.template
了撒谎法拉速度飞书了士大夫了士大夫撒地方sadfasfdsa
asfasdfasdfasfdasfd ${FOO} ${BAR}
safdasfdadsfasfdafdasfdasdfasdfasfdadsfafdsaf

以及如下环境变量:

export FOO=abcd
export BAR=1234

执行如下 Shell 命令:

envsubst < "example.txt.template" > "example.txt"

将输出如下文件及内容:

# example.txt.template
了撒谎法拉速度飞书了士大夫了士大夫撒地方sadfasfdsa
asfasdfasdfasfdasfd abcd 1234
safdasfdadsfasfdafdasfdasdfasdfasfdadsfafdsaf

附加说明

命令 envsubst 属于 gettext 软件包。在 Debian 中,通过如下命令安装:apt-get install gettext-base

参考文献

linux – How to substitute shell variables in complex text files – Stack Overflow