2017-07-06 99 views
0

在我的脚本中,我使用ARGV流获取命令行参数。有一段代码:ARGV循环跳过Ruby中的语句

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 

但脚本忽略“帮助”,并填写“帮助”参数卷曲。你能帮助我吗?

+1

'红宝石a.rb帮助'为我工作,打印'“这是帮助4 U”'字符串,并立即退出。 _Sidenote:_'ARGV'不是一个流。 – mudasobwa

+0

'ARGV'是一个数组,'ARGF'是数据流。 – Stefan

+0

检查你是否因某些原因有一些空白。 – ndn

回答

0

尝试使用.strip!并查看RubyString class documentation

这些可用于在遍历Ruby命令提供的每个参数时清理输入。如果使用ARGVArray作为Array并且在Ruby Array class documentation上查看在使用数组数据类型(这是ARGVs进来的形式)时Ruby中可用的方法方法可能会更好。例如,使用.include?("help") 。尽早使用这些方法文档对于理解Ruby为您提供的工具至关重要。

+1

不断告诉OP阅读文档不是我认为的答案,这是一条评论 – engineersmnky

+0

我不只是说阅读文档,我明确地说过在文档中回答问题的内容,然后解释我是如何得到答案的。因为学习时除了答案是重要的,它像教人鱼一样。我永远不会告诉某人阅读文档,这是浪费我们两个人的时间,但我认为引用我的来源是值得实践的,这是我的感受。 –

+0

感谢broken_historian,包括?工程,但我会尝试按照tadman的建议使用OptParse,它看起来更有用。 – mia102aim