Краткий взгляд на документацию и примеры вместе со стандартными соглашениями 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, который вы можете сделать exec, псевдоним и т. Д .:
#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"}