Передача строки с дефисом в качестве параметра в Trollop
Я создал довольно простой скрипт ruby, который анализирует параметры с помощью Trollop (2.1.2). Работает нормально, пока не передам значение, начинающееся с -
в качестве параметра. Пример:
def main
opts = Trollop::options do
opt :id, 'Video Id', :type => String
opt :title, 'Video Title', :type => String
end
if opts[:id].nil?
Trollop::die :id, 'please specify --id'
end
и когда я бегу с
ruby my_script.rb --id '-WkM3Blu_O8'
не получается с ошибкой
Error: unknown argument '-W'.
Try --help for help.
Итак, как я могу справиться с этим делом?
1 ответ
Работа Trollop заключается в разборе параметров командной строки. Если бы у вас был параметр, определенный как '-W', как бы он различал этот параметр и аргумент, который начинался с '-W'?
Таким образом, даже если бы была опция Trollop, чтобы игнорировать неизвестные опции и позволить им передавать в качестве аргументов вашей программе, если вы вообще определили какие-либо опции, у вас все равно будет проблема, если строка начинается с дефиса, за которым следует буква определенной опции.
Одна вещь, которую вы могли бы сделать, это потребовать от пользователей, которые хотят начать аргумент с дефиса, ставить перед ним обратную косую черту. Это позволит скрыть его от Trollop, но затем, перед его использованием, вам придется удалить обратную косую черту. Пока обратная косая черта никогда не будет допустимым символом в строке идентификатора, все должно быть в порядке.
Кстати, вы можете добавить short
опция:
require 'trollop'
opts = Trollop::options do
opts = Trollop::options do
opt :id, 'Video Id', type: String, short: :i
opt :title, 'Video Title', type: String, short: :t
end
end
p opts
p ARGV
Вы можете попробовать запустить его так, а затем наблюдать за результатом:
➜ stack_overflow git:(master) ✗ ./trollop.rb -i 3 '\-i1'
{:id=>"3", :title=>nil, :help=>false, :id_given=>true}
["\\-i1"]