bash - envsubst 不能就地替换吗?

标签 bash environment-variables

我有一个配置文件,其中包含一些 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

小心其他不使用临时文件的解决方案。管道是异步的,因此文件在截断后偶尔会被读取。

关于bash - envsubst 不能就地替换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35078753/

相关文章:

linux - 我可以用什么来捕获我在 bash 中运行的每个命令(a-la 历史)

swift - 通过 GUI 获取 sudo 询问密码

python - 为什么python不能读取我的环境变量?

android - 在 Android 项目中读取 Jenkins 环境变量?为自动构建签署 APK

bash - 根据分隔符分割字符串并使用 bash 脚本将它们放入数组中

bash - 无需 curl 或 bash 即可连接到网站

linux - 自主脚本

c++ - 如何使用环境变量添加现有项目?

sql-server-2005 - 需要更智能的环境包配置

windows - 为什么 Windows 7 中的 %AppData% 似乎指向错误的文件夹?