【问题标题】:ARGV loop skips if statement in RubyARGV 循环跳过 Ruby 中的 if 语句
【发布时间】: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...") 来获取内容。

标签: ruby argv


【解决方案1】:

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

这些可用于在您遍历 Ruby 命令提供的每个参数时清理输入。最好只使用ARGV Array 作为Array 并查看Ruby Array class documentation 以查看使用数组数据类型时Ruby 中可用的方法方法(这是ARGV 的形式) ..如使用.include?("help")进行子串搜索。尽早使用这些方法文档对于理解 Ruby 为您提供的工具至关重要。

【讨论】:

  • 在我看来,不断告诉 OP 阅读文档不是答案,而是评论
  • 我不只是说阅读文档,我明确说明了文档中回答问题的内容,然后解释了我是如何得到这个答案的。因为在学习的时候除了答案很重要,就像教人钓鱼一样。我永远不会只告诉别人阅读文档,那是在浪费我们俩的时间,但我确实认为引用我的资源是值得练习的,我觉得我就是这样做的。
  • 感谢 broken_historian,包括?可以,但我会尝试按照 tadman 的建议使用 OptParse,它看起来更有用。
  • @broken_historian 编码论坛上的答案通常涉及代码。您的大多数答案似乎只是建议人们在哪里可以找到答案,但从未真正回答过这个问题。 (这并不特定于这个答案,如图所示Here 我可能不是唯一有这种感觉的人)
  • 因为我得到的只是高声望,人们在我所有的回答周围留下了批评和更多的评论,就像大多数女人一样,我在这里不觉得很受欢迎。我将把我对开源的贡献限制为 github 和 gitlab 上的代码贡献。 @mia102aim:Optsparse 是一种更好的处理方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多