它不可能invoke
从一个循环内相同rake任务不止一次 。 但是,我希望能够调用rake first
通过一个数组和循环,并调用second
上使用不同的参数每次迭代。 由于invoke
仅被执行的第一次,我试图用execute
,但耙::任务#执行不使用图示(*)操作,只需要一个参数。
desc "first task"
task :first do
other_arg = "bar"
[1,2,3,4].each_with_index do |n,i|
if i == 0
Rake::Task["foo:second"].invoke(n,other_arg)
else
# this doesn't work
Rake::Task["foo:second"].execute(n,other_arg)
end
end
end
task :second, [:first_arg, :second_arg] => :prerequisite_task do |t,args|
puts args[:first_arg]
puts args[:second_arg]
# ...
end
它周围的一个黑客是把对参数execute
到一个数组,在second
检查args来的结构,但似乎,那么,hackish的。 难道还有其他(更好?)的方式来完成我想做什么?
您可以使用耙::任务#重新启用,以允许它被再次调用。
desc "first task"
task :first do
other_arg = "bar"
[1,2,3,4].each_with_index do |n,i|
if i == 0
Rake::Task["second"].invoke(n,other_arg)
else
# this does work
Rake::Task["second"].reenable
Rake::Task["second"].invoke(n,other_arg)
end
end
end
task :second, [:first_arg, :second_arg] do |t,args|
puts args[:first_arg]
puts args[:second_arg]
# ...
end
$耙第一
1
bar
2
bar
3
bar
4
bar
在execute
功能要求一个耙:: TaskArguments作为参数,这就是为什么它只是接受一个参数。
你可以使用
stuff_args = {:match => "HELLO", :freq => '100' }
Rake::Task["stuff:sample"].execute(Rake::TaskArguments.new(stuff_args.keys, stuff_args.values))
然而,有调用和执行之间的另一个不同之处,执行不运行:当调用做到这一点首先prerequisite_task,所以调用和重新启用或执行不具有完全相同的含义。
这个工作对我来说,这是很容易理解的,你只需要循环您bash命令。
task :taskname, [:loop] do |t, args|
$i = 0
$num = args.loop.to_i
while $i < $num do
sh 'your bash command''
$i +=1
end
end