我正在尝试使用bash的envsubst
将环境变量替换为文件。这是一个无法按预期工作的简单示例:
创建一个包含变量替换的文件:
echo 'Filename: ${FILE}' > test.txt
现在尝试在for循环中使用envsubst:
for FILE in `ls`; do envsubst < test.txt; done
Filename:
结果只是Filename:
替换失败。
回声在这种情况下可以正常工作:
for FILE in `ls`; do echo Filename: ${FILE}; done
Filename: test.txt
我不明白为什么回声会起作用而envsubst会失败。
答案 0 :(得分:2)
这是因为在for循环FILE
中是一个shell变量,它实际上不是环境的一部分,因此不会传递给envsubst的环境。
尝试一下
for FILE in `ls`; do
env | grep FILE;
done
并将其与此
进行比较for FILE in `ls`; do
export FILE;
env | grep FILE;
done
因此,如果要使FILE
为环境变量,则需要使用以前内置的export
。
答案 1 :(得分:1)
请确保导出该变量,并且,如果您偏执/出于安全考虑,请选择在命令行上将其命名:
export FILE
envsubst < template #all exported environment avail in template
envsubst '${FILE}' < template #only FILE available