【问题标题】:How to envsubst a files matching a pattern [duplicate]如何envsubst匹配模式的文件[重复]
【发布时间】:2021-11-25 22:25:50
【问题描述】:

有些文件与我想使用 bash 脚本执行环境变量替换的模式匹配。但是我似乎无法让它工作。

我有点困惑为什么这会导致所有目标文件都是空的:

for file in /path/to/files/*.yml; do
  envsubst '${VAR1}' < "$file" > "$file"
done

【问题讨论】:

    标签: bash envsubst


    【解决方案1】:

    事实证明envsubst 无法处理相同的源和目标。所以新文件必须写在别处,然后把原来的替换掉。

    for file in /path/to/files/*.yml; do
      envsubst '${VAR1}' < $file > "$file.modified"
      rm $file
      mv $file.modified $file
    done
    

    【讨论】:

    • 读取和写入同一个文件不限于 envsubst 总是需要一个临时文件。甚至文件编辑器也可能有一个临时文件。这样做的好技巧,“ ... origfile > tempfile && mv tempfile origfile 但如果文件是符号链接,它会破坏链接,这不应该是文件编辑器的情况。
    • 确实,envsubst 在调用它之前不知道你在 shell 中做了什么重定向。 (shell 在运行命令之前会处理重定向,原因应该很明显。)
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多