我正在尝试使用bash的envsubst将一个环境变量替换到一个文件中。这里有一个简单的例子,它不能像预期的那样工作:
创建一个包含变量替换的文件:
echo 'Filename: ${FILE}' > test.txt现在尝试在for循环中使用envsubst:
for FILE in `ls`; do envsubst < test.txt; done
Filename:结果就是Filename:替换失败。
在此上下文中,Echo按预期工作:
for FILE in `ls`; do echo Filename: ${FILE}; done
Filename: test.txt我不明白为什么echo可以工作,而envsubst会失败。
发布于 2019-10-18 11:46:36
这是因为在for循环中,FILE是一个外壳变量,它实际上不是环境的一部分,所以它不会传递给envsubst的环境。
试试这个
for FILE in `ls`; do
env | grep FILE;
done并将其与此进行比较
for FILE in `ls`; do
export FILE;
env | grep FILE;
done所以,如果你想让FILE成为一个环境变量,你需要在前面使用export内置。
发布于 2019-10-18 11:43:46
确保导出该变量,如果您是偏执狂/注重安全的人,可以选择在命令行中对其进行命名:
export FILE
envsubst < template #all exported environment avail in template
envsubst '${FILE}' < template #only FILE availablehttps://stackoverflow.com/questions/58443542
复制相似问题