задача rakefile не принимает вторые параметры

#ruby #rake #rakefile

#ruby #рейк #rakefile

Вопрос:

У меня есть фрагмент кода из моего rakefile. Некоторые задачи должны иметь несколько параметров.

 desc 'confidential'
  task :task1, [:targetPrj, :arg1] do |t,args|
  args.with_defaults(:arg1 => "0")
  TARGET_PROJECT = args[:targetPrj]
  TEST_SW = args[:emcTest]
  makeApp(t)
end
  

Если я вызываю rake task1[TARGET _1] , все в порядке, но если я добавлю второй параметр rake task1[TARGET _1, 5] , я получу:

 Rake aborted!
Don't know how to build task task1[TARGET_1, '
  

Я действительно не знаю, что не так?

Ответ №1:

Параметры должны быть разделены запятыми без пробелов:

 task1[TARGET_1,5]
  

Ответ №2:

Аргументы командной строки разделяются пробелами, и rake обрабатывает каждый аргумент как отдельную задачу. Это привело бы к запуску задач foo и bar :

 rake foo bar
  

Если у вас есть:

 rake task1[TARGET_1, 5]
  

тогда rake получает два аргумента: task1[TARGET_1, и 5] . Попытка проанализировать эти строки приводит к ошибке.

Чтобы получить правильный результат, вы можете убрать пробел, экранировать пробел или заключить аргумент в кавычки:

 rake task1[TARGET_1,5]
rake task1[TARGET_1, 5]
rake "task1[TARGET_1, 5]"
  

Обратите внимание, что это поведение не зависит от rake, это то, как аргументы командной строки работают в целом.