Вы можете указать формальные аргументы в rake, добавив символьные аргументы к вызову задачи. Например:
require 'rake'
task :my_task, [:arg1, :arg2] do |t, args|
puts "Args were: #{args}"
end
task :invoke_my_task do
Rake.application.invoke_task("my_task[1, 2]")
end
# or if you prefer this syntax...
task :invoke_my_task_2 do
Rake::Task[:my_task].invoke(3, 4)
end
# a task with prerequisites passes its
# arguments to it prerequisites
task :with_prerequisite, [:arg1, :arg2] => :my_task #<- name of prerequisite task
# to specify default values,
# we take advantage of args being a Rake::TaskArguments object
task :with_defaults, :arg1, :arg2 do |t, args|
args.with_defaults(:arg1 => :default_1, :arg2 => :default_2)
puts "Args with defaults were: #{args}"
end
Затем из командной строки:
> rake my_task[1,2]
Args were: {:arg1=>"1", :arg2=>"2"}
> rake "my_task[1, 2]"
Args were: {:arg1=>"1", :arg2=>"2"}
> rake invoke_my_task
Args were: {:arg1=>"1", :arg2=>"2"}
> rake invoke_my_task_2
Args were: {:arg1=>3, :arg2=>4}
> rake with_prerequisite[5,6]
Args were: {:arg1=>"5", :arg2=>"6"}
> rake with_defaults
Args with defaults were: {:arg1=>:default_1, :arg2=>:default_2}
> rake with_defaults['x','y']
Args with defaults were: {:arg1=>"x", :arg2=>"y"}
Как показано во втором примере, если вы хотите использовать пробелы, кавычки вокруг целевого имени необходимы, чтобы оболочка не разделяла аргументы в пробеле.
Глядя на код в rake.rb , выясняется, что rake не анализирует строки задач для извлечения аргументов для предварительных условий, поэтому вы не можете выполнить task :t1 => "dep[1,2]"
. Единственный способ указать различные аргументы для предварительного условия - это явно вызвать его в зависимом действии задачи, как в :invoke_my_task
и :invoke_my_task_2
.
Обратите внимание, что некоторые оболочки (например, zsh) требуют, чтобы вы выходили за скобки: rake my_task\['arg1'\]