【发布时间】:2016-11-07 16:38:38
【问题描述】:
需要编写一个 ruby 脚本,该脚本将根据给定脚本的参数解析 yaml 文件。
下面是一个类似于 yaml 文件的示例:
server01:
- mail
- dhcp
- dns
server02:
- mail
- dhcp
希望能够像这样运行脚本,./test.rb -s mail
并让它返回在其序列列表中包含邮件的服务器列表
这可能吗?
【问题讨论】:
需要编写一个 ruby 脚本,该脚本将根据给定脚本的参数解析 yaml 文件。
下面是一个类似于 yaml 文件的示例:
server01:
- mail
- dhcp
- dns
server02:
- mail
- dhcp
希望能够像这样运行脚本,./test.rb -s mail
并让它返回在其序列列表中包含邮件的服务器列表
这可能吗?
【问题讨论】:
只需将'mail' 替换为正确的参数即可。我猜像ARGV[1]?
require 'yaml'
h = YAML.load_file('config.yaml')
h.select { |k, v| v.include?('mail') }.keys
# => should return ["server01","server02"]
【讨论】:
.map(&:first) 而不是 keys 应该可以解决这个问题。你也可以collect{|k,v| k if v.include('mail)}.compact
select 方法返回一个散列,而不是一个数组。 Engineermnsky 的评论将在 1.8.x 中起作用。