替换文件中的变量

替换文件中的变量

我有一个名为 的文件template.tpl

#!/bin/bash
RESULT=`curl https://${MY_VAR_USERNAME}:${MY_VAR_PASSWORD}@my-domain.com/service`
echo $RESULT
if [ "$RESULT" == "ok" ]; then
  exit 0
fi
exit 2

该模板文件应使用此脚本进行解析replace-script.sh

#!/bin/bash
set -a
: ${MY_VAR_USERNAME="testuser"}
: ${MY_VAR_PASSWORD="supersecurepassword"}
# replace every variable declared in a .tpl file delete the .tpl extention 
srcFile="template.tpl"
cat $srcFile | envsubst > $(echo $srcFile | sed -r 's/.tpl$//')

当我现在做时,bash replace-script.sh我得到了以下结果:

#!/bin/bash
RESULT=`curl https://testuser:[email protected]/service`
echo 
if [ "" == "ok" ]; then
  exit 0
fi
exit 2

因此,我想要解析的变量被完美解析了。但糟糕的是,每个 $VAR 都被替换了,而不仅仅是我的replace-script.sh文件中声明的变量。

答案1

envsubst可以采用要替换的参数列表:

envsubst '$MY_VAR_USERNAME $MY_VAR_PASSWORD'

(它们必须在一个字符串中,并且必须有符号$,很烦人。)


请注意,标准字符串比较运算符是=,而不是==,后者在 Bash 和其他语言中有效,但在dashDebian 和 Ubuntu/bin/sh中无效

另外,您可以跳过 sed 并使用 shell 的扩展从文件名中删除后缀:"${srcFile%.tpl}"

相关内容