【发布时间】:2017-07-06 13:39:03
【问题描述】:
在我的脚本中,我使用 ARGV 流来获取命令行参数。有一段代码:
ARGV.each do|a|
item = JSON.parse(%x{curl -X GET https://puppetdb.ai:8081/pdb/query/v4/facts/#{a} --tlsv1 --interface x.x.x.x --cacert certificate.pem --cert certificate-pem.cer --key certificate-privkey.pem})
item.each do |h|
arr << {"name" => h['certname'], "#{a}" => h['value'], "environment" => h['environment']}
end
end
通过 curl 我使用 puppetdb API 获取一些数据。一切正常,但我想添加一些 if 语句来打印脚本帮助。看起来是这样的:
ARGV.each do|a|
if (a == "help")
puts "this is help 4 U"
else
item = JSON.parse(%x{curl -X GET https://puppetdb.ai:8081/pdb/query/v4/facts/#{a} --tlsv1 --interface x.x.x.x --cacert certificate.pem --cert certificate-pem.cer --key certificate-privkey.pem})
item.each do |h|
arr << {"name" => h['certname'], "#{a}" => h['value'], "environment" => h['environment']}
end
end
end
但脚本会忽略“帮助”并填写 curl 的“帮助”参数。你能帮我解决这个问题吗?
【问题讨论】:
-
ruby a.rb help为我工作,打印"this is help 4 U"字符串并立即退出。 旁注:ARGV不是流。 -
ARGV是一个数组,ARGF是流。 -
检查是否因为某种原因有一些空格。
-
如果您在 Ruby 中使用命令行参数,那么 OptParse 是一个不错的起点。它使添加
-x和--extra类型选项变得容易。 -
请注意,不要在外部使用
curl并通过%x{...}吸入内容,而只是require 'open-uri',使用open-uri library 和`open("puppet...") 来获取内容。