bel*_*fyu 5 shell environment-variables
给定两个 dotenv 文件,
# file1
FOO="X"
BAR="B"
Run Code Online (Sandbox Code Playgroud)
和
# file2
FOO="A"
BAZ="C"
Run Code Online (Sandbox Code Playgroud)
我想跑
$ ./merge.sh file1.env file2.env > file3.env
Run Code Online (Sandbox Code Playgroud)
得到以下输出:
# file3
FOO="A"
BAR="B"
BAZ="C"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用python-dotenv模块将文件解析为字典,合并它们并写回。但是,我觉得 shell 中应该有一个简单的解决方案,可以让我摆脱第三方模块来完成这样的基本任务。
好吧,所以我最终使用了
$ sort -u -t '=' -k 1,1 file1 file2 | grep -v '^$\|^\s*\#' > file3
Run Code Online (Sandbox Code Playgroud)
它省略了空行和注释。尽管如此,提议的awk解决方案也同样有效。
另一种非常简单的方法是使用排序:
sort -u -t '=' -k 1,1 file1 file2 > file3
Run Code Online (Sandbox Code Playgroud)
生成一个文件,其中来自 file1 的键优先于来自 file2 的键。