Rakefile 任务块 arg 不工作

Rakefile task block arg not working

我的 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......

怎么回事?

这样称呼它:

rake add_person[john]

或者如果您使用的是 zsh:

rake add_person\[john\]

编辑: 对关于能够这样称呼它的评论的回应:rake add_person john

我想你有两个选择。

使用环境变量方法传递参数:

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

或者,使用 ARGV 进行 Hack(个人不推荐):

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

我个人只是按预期使用它。

更新任务

task :add_person, [:name] => :environment do |_t, args|
  puts "My name is #{args[:name]}"
end

和运行

rake add_person['john']