Ruby:将进程分段映射到hashmap



我有一个棘手的问题。我尝试将一些流程参数映射到Ruby中的哈希映射。我想比较参数(第一个示例(和配置文件(例如第二个示例中的json(中的流程配置。

我有这样的东西:

/usr/bin/dockerd-current 
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current 
--seccomp-profile=/etc/docker/seccomp.json 
--selinux-enabled 
--storage-driver overlay2

我想要一个像这样的标签图

{ 
'add-runtime' => {
'docker-runc' => '/usr/libexec/docker/docker-runc-current'
},
'seccomp-profile' => '/etc/docker/seccomp.json',
'selinux-enabled' => '',
'storage-driver' => 'overlay2'
}

编辑:我制作了一个脚本,将参数一般映射到哈希映射中。问题是,此脚本无法正确检测和映射嵌套元素。这是我所拥有的:

params = "/usr/bin/dockerd-current     --add-runtime    docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2"
args = params.split("--")
# Remove process binary from args.
args.shift
# Remove multiple whitespaces and replace equals sign with single whitespace.
args.map! { |item| item.split.join(" ") }
args.map! { |item| item=item.gsub('=',' ') }
# Single word params implicit boolean flags with value true
# Adding true here.
args.map! do |item| 
if item.split(" ").size == 1
item+" true"
else
item
end
end
# Map results to hashmap.
# TODO: substructures are not mapped properly... 
args.map! do |x|
s = x.split(" ", 2)
[s[0], s[1]]
end
puts args.to_h

我很高兴能得到任何帮助。

非常感谢!

正如评论中所建议的,https://docs.ruby-lang.org/en/2.1.0/OptionParser.html是要走的路。

建立你的选项哈希,然后与积极的支持进行区分(如果你有((http://api.rubyonrails.org/v2.3/classes/ActiveSupport/CoreExtensions/Hash/Diff.html),或者hashdiff gem(如果可以的话(。如果所有其他操作都失败,则可以检查左侧的键与右侧的键,反之亦然。

最新更新