我有一个配置文件,其中包含一些 ENV_VARIABLE 样式的变量。
This is my file.
It might contain $EXAMPLES of text.
现在我希望将该变量替换为保存在实际环境变量中的值。所以我正在尝试这个:
export EXAMPLES=lots
envsubst < file.txt > file.txt
但当输入文件和输出文件相同时,它不起作用。结果是一个大小为 0 的空文件。
这一定有一个很好的理由,一些我不知道的 bash 基础知识?
我如何实现我想要做的事情,理想情况下不需要先输出到不同的文件,然后用它替换原始文件?
我知道我可以很容易地做到这一点sed
,但是当我发现envsubst
命令我认为它应该非常适合我的用例,所以我想使用它。
这是我使用的解决方案:
originalfile="file.txt"
tmpfile=$(mktemp)
cp --attributes-only --preserve $originalfile $tmpfile
cat $originalfile | envsubst > $tmpfile && mv $tmpfile $originalfile
请小心其他不使用临时文件的解决方案。管道是异步的,因此有时会在文件被截断后读取文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)