问题描述
在部署服务时,脚本的部分内容是是动态生成的。我们可以使用 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