我正在尝试编写一个脚本,该脚本将从主机文件中获取IP地址,并从配置文件中获取用户名信息。我显然没有将文件名作为正确的哈希/值。
我的File.new(options[:config_file], 'r').each { |params| puts params }
应该打电话给我?我已经尝试过它当前设置的内容,并且
File.new(config_file, 'r').each { |params| puts params }
,以及File.new(:config_file, 'r').each { |params| puts params }
没有运气。
我应该一起做些不同的事吗?喜欢load(filename = nil)
?
options = {}
opt_parser = OptionParser.new do |opt|
opt.banner = 'Usage: opt_parser COMMAND [OPTIONS]'
opt.on('--host_file','I need hosts, put them here') do |host_file|
options[:host_file] = host_file
end
opt.on('--config_file', 'I need config info, put it here') do |config_file|
options[:config_file] = config_file
end
opt.on('-h', '--help', 'What your looking at') do |help|
options[:help] = help
puts opt
end
end
opt_parser.parse!
if options[:config_file]
File.new(options[:config_file], 'r').each { |params| puts params }
end
if options[:host_file]
File.new(options[:host_file], 'r').each { |host| puts host }
end
答案 0 :(得分:0)
您可以编写自己的解析器或使用已经实现的解析器。
使用"hosts" gem的示例:(您需要安装它)
require 'hosts'
hosts = Hosts::File.read('/etc/hosts')
entries = hosts.elements.select{ |element| element.is_a? Hosts::Entry }
addresses = Hash[entries.map{ |entry| [entry.name, entry.address] }]
# You should get a hash of entry names and addresses
# {"localhost"=>"127.0.0.1", "ip6-localhost"=>"::1"}
存储配置的常用方法是使用YAML文件。
考虑以下YAML文件(在'/tmp/config.yml'中):
username: foo
password: bar
您可以使用YAML module:
解析此配置文件require 'yaml'
config = YAML.load_file('config.yml')
# You should get a hash of config values
# {"username"=>"foo", "password"=>"bar"}
如果您不希望密码以明文形式存储在配置文件中,您可以:
修改强>:
如果您只需要从文本文件中提取主机名,考虑每行一个主机名,您可以使用类似hostnames = IO.readlines("config.yml").map{ |line| line.chomp }
的内容来获取主机名数组。您可以在遍历此数组后进行操作。
www.ruby-doc.org/core-2.1.0/IO.html#method-i-readline