bash

您所在的位置:网站首页 yml合并 bash

bash

2024-07-14 06:01| 来源: 网络整理| 查看: 265

是否可以使用一些智能管道和编码,以递归方式合并 yaml 文件? 在 PHP 中,我将它们组成一个数组(每个模块都可以添加或更新系统中/的配置节点)。

目标是一个导出 shellscript,它将所有单独的模块文件夹的配置文件合并到大的合并文件中。例如,它更快、更高效,并且在我们通过 FTP 部署新版本时客户不需要模块化。

它的行为应该像 PHP 函数:array_merge_recursive

文件系统结构是这样的:

mod/a/config/sys.yml mod/a/config/another.yml mod/b/config/sys.yml mod/b/config/another.yml mod/c/config/totally-new.yml sys/config/sys.yml

配置如下:

date: format: date_regular: %d-%m-%Y

一个模块可以,比方说,这样做:

date: format: date_regular: regular dates are boring date_special: !!!%d-%m-%Y!!!

到目前为止,我有:

#!/bin/bash #........ cp -R $dir_project/ $dir_to/ for i in $dir_project/mod/*/ do cp -R "${i}/." $dir_to/sys/ done

这当然会破坏循环中所有现有的配置文件..(其余系统文件是唯一命名的)

基本上,我需要一个用于命令行的 yaml 解析器,以及一个类似 array_merge_recursive 的替代方案。然后一个 yaml 编写器输出它合并。我担心我必须开始学习 Python,因为 bash 不会在这方面削减它。

最佳答案

例如,您可以使用 perl。下一个类轮:

perl -MYAML::Merge::Simple=merge_files -MYAML -E 'say Dump merge_files(@ARGV)' f1.yaml f2.yaml

对于下一个输入文件:f1.yaml

date: epoch: 2342342343 format: date_regular: "%d-%m-%Y"

f2.yaml

date: format: date_regular: regular dates are boring date_special: "!!!%d-%m-%Y!!!"

打印合并结果...

--- date: epoch: 2342342343 format: date_regular: regular dates are boring date_special: '!!!%d-%m-%Y!!!'

因为@Caleb 指出该模块现在只是开发人员,这里是一个替代品。它有点长,使用两个(但通常可用)模块:

YAML 和Hash::Merge::Simple perl -MYAML=LoadFile,Dump -MHash::Merge::Simple=merge -E 'say Dump(merge(map{LoadFile($_)}@ARGV))' f1.yaml f2.yaml

产生与上面相同的结果。

关于bash - 使用 bash 递归合并 yaml 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25630633/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3