[英]How can I pass a switch before the command in a Thor app?
我有一個Thor應用程序,所有命令都需要許多相同的參數。 通用參數使用class_option
聲明。 但是我希望用戶將它們放在命令之前。
例如,我的用戶可能需要輸入以下順序...
mycli cmd1 arg1 arg2 --switch1 --switch2=value
mycli cmd2 arg3 arg4 --switch1 --switch2=value
mycli cmd3 arg5 arg6 --switch1 --switch2=value
每次我的用戶需要重新輸入或大量退格鍵來編輯命令行時。 這樣做會更容易...
mycli --switch1 --switch2=value cmd1 arg1 arg2
mycli --switch1 --switch2=value cmd2 arg3 arg4
mycli --switch1 --switch2=value cmd3 arg5 arg6
這樣,每次調用都需要更改的部分在命令行的末尾,而可能保持不變的參數在開始。 命令行編輯變得非常容易。
有什么辦法可以在托爾支持這一點嗎?
簡要查看文檔和示例以及標准的ruby約定將表明應該最后通過選項。 但是,這是使用ruby腳本對命令行進行“排序”的方法,這是一個基本示例:
#test.thor
class Test < Thor
method_option :demo, :aliases => "-d", :desc => "demo"
method_option :foo, :aliases => "-f", :desc => "foo"
method_option :bar, :aliases => "-b", :desc => "bar"
desc "example", "an example task"
def example
puts "option switches passed: #{options.to_s}"
end
end
還有您可以執行,別名等的ruby腳本:
#hack.rb
#!/usr/bin/env ruby
args = ARGV
cmd = args.reject{|a| a[0] == '-'}.first
switches = args.select{|a| a[0] == '-'}
cmd_args = args[1..-1] - switches
system_cmd = ['thor', cmd, args, switches].join(' ')
system(system_cmd)
為了測試目的,您可以這樣調用它:
thor test:example -f -d -b
#=>option switches passed: {"foo"=>"foo", "demo"=>"demo", "bar"=>"bar"}
ruby hack.rb -f -b -d test:example
#=> option switches passed: {"foo"=>"foo", "bar"=>"bar", "demo"=>"demo"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.