Ruby を使用して、コマンド ライン引数を取るコードを実行しています。今、私は異なるオプションで同じプログラムを使用しようとしているので、オプションをファイルに入れています。プログラムが各行を読み取ってオプションを解釈し、それに応じてプログラムを実行するようにします。
しかし、私はこのエラーが発生します。"C:/Ruby193/lib/ruby/1.9.1/optparse.rb:1348:in block in parse_in_order': undefined method
shift' for "--c execue --query unix --Servername abc123":String (NoMethodError)"
ファイルを読み取り、行を文字列として扱うことを理解しています。しかし、このシフトエラーを克服し、コマンドプロンプトで入力されたかのように行を処理する方法があるかどうか疑問に思っています. またはより良い解決策。
これが私のコードです。
require 'optparse'
require 'micro-optparse'
# --command execue --query unix command --Servername abc123
f =File.open("list_of_commands.txt", "r")
f.each_line { |line|
line= line.chomp
#line = "--c execue --query unix --Servername abc123"
#line = eval("\"#{line}\"")
puts line
options = {}
OptionParser.new do |opts|
opts.on("-c", "--command result,execue,chart,scpfile", String, "Single command to execute ") do |c|
options[:comd] = c
end
opts.on("-q", "--query remote command, unix command", String, "performs the command on local or remote machine") do |q|
options[:query] = q
end
opts.on("-s", "--servername CHSXEDWDC002 ", String, "server name to execute the command") do |v|
options[:hname] = v
end
opts.on_tail('-h', '--help', 'Show this message') do
puts opts
exit
end
end.parse!(line)
p options
}
ファイルの内容は以下 --c execue --query unix --Servername abc123
私も micro-optparse を使用しようとしましたが、同じエラーに直面しています。回避策はありますか?
更新: 「@mu is too short」からの提案に従って、以下のオプションを試しました。end.parse!("#{Shellwords.shellsplit(行)}") および/または end.parse!(Shellwords.shellsplit(行))。しかし、どれも機能しませんでした。
また、「line = line.split("\t")」と end.parse!(line) を使用して行を配列として分割しようとしました。--c execue --query unix --Servername abc123 として出力
しかし、今ではブロックとしてエラーが発生します:無効なオプション --c execute
更新: #2 エラーを見ると、問題は間違ったパラメーター (-c) にありますが、Array .
更新: 3 配列の受け渡しは、-c などの短い形式の引数に対してのみ機能しましたが、長い形式が指定された場合、無効な引数エラーで失敗しました。
optparse に関するドキュメントはあまりありません。マイクロパースも試しましたが、デフォルトの値が必要で、オプションではありません:(