我的Rakefile中有一项任务
desc "Create a new person."
task :add_person, :name do |t, args|
sh "echo My name is #{args.name}"
end
当我做$ rake add_person john
我明白了:
echo My name is
My name is
rake aborted!
Don't know how to......
但我应该得到:
echo My name is john
My name is john
rake aborted!
Don't know how to......
发生了什么?
答案 0 :(得分:1)
这样称呼:
rake add_person[john]
或者如果您使用的是zsh:
rake add_person\[john\]
编辑:对评论的回复,如下所示:rake add_person john
我认为你有两种选择。
使用环境变量方法传递args:
desc "Create a new person."
task :add_person do |t, args|
name = ENV.fetch('NAME')
sh "echo My name is #{name}"
end
然后这样打电话:
$ rake add_person NAME=john
或者,Hack使用ARGV(非个人推荐):
desc "Create a new person."
task :add_person do
name = ARGV.last
sh "echo My name is #{name}"
# Task does nothing
task name.to_sym do ; end
end
然后像这样使用:
$rake add_person john
我个人只是按照预期使用它。
答案 1 :(得分:0)
更新任务
task :add_person, [:name] => :environment do |_t, args|
puts "My name is #{args[:name]}"
end
并运行
rake add_person['john']