Rakefile任务块arg无法正常工作

时间:2015-04-10 00:59:46

标签: ruby rake rake-task rakefile

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

发生了什么?

2 个答案:

答案 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']