用于比较 2 个 .env 文件,然后在另一个文件的基础上覆盖默认文件上的值的脚本

用于比较 2 个 .env 文件,然后在另一个文件的基础上覆盖默认文件上的值的脚本

我有 2 个 env 文件。一个是默认值.env,另一个是.env.overwrite

我想要一个脚本文件,当我运行并指定参数时,例如:

./rebuild_env .env .env.overwrite

它将把 in 中每个键的值覆盖.env为 中的键.env.overwrite。如果某些键不存在则.env.overwrite保留默认值。例如:

对于.env文件:

VALUE1=default_value1
VALUE2=default_value2
VALUE3=default_value3

并在.env.overwrite文件中:

VALUE1=new_value1
VALUE3=new_value3

运行该脚本后,.env文件将是:

VALUE1=new_value1
VALUE2=default_value2
VALUE3=new_value3

我已经尝试在互联网上研究三天了,但找不到适合我需要的。有人可以帮助指导我吗?我真的很感谢你的帮助。

答案1

最简单的解决方案是连接两个文件:

cat .env .env.overwrite > .env.new

那么最后更新的条目将成为活动条目。现在我们只需要删除所有的重复条目即可。

如果顺序和其他评论并不重要:

for variable in \
    $(cut -d= -f1 .env.overwrite .env | sort |uniq) ; 
do 
     grep ^${variable}= .env.overwrite || \
     grep ^${variable}= .env ; 
done

相关内容