2017-07-06 49 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