【发布时间】:2021-11-25 22:25:50
【问题描述】:
有些文件与我想使用 bash 脚本执行环境变量替换的模式匹配。但是我似乎无法让它工作。
我有点困惑为什么这会导致所有目标文件都是空的:
for file in /path/to/files/*.yml; do
envsubst '${VAR1}' < "$file" > "$file"
done
【问题讨论】:
有些文件与我想使用 bash 脚本执行环境变量替换的模式匹配。但是我似乎无法让它工作。
我有点困惑为什么这会导致所有目标文件都是空的:
for file in /path/to/files/*.yml; do
envsubst '${VAR1}' < "$file" > "$file"
done
【问题讨论】:
事实证明envsubst 无法处理相同的源和目标。所以新文件必须写在别处,然后把原来的替换掉。
for file in /path/to/files/*.yml; do
envsubst '${VAR1}' < $file > "$file.modified"
rm $file
mv $file.modified $file
done
【讨论】:
envsubst 在调用它之前不知道你在 shell 中做了什么重定向。 (shell 在运行命令之前会处理重定向,原因应该很明显。)