paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

引数を使えるrakeタスクを作成して実行するとzshに怒られた

環境

$ rails -v
Rails 4.1.1
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin14.0]
$ echo $SHELL
/bin/zsh

タスクを作成

my_taskを作成してみます。

rails g task my_task
# lib/task/my_task.rake
namespace :my_task do
    desc "おれのタスク"
    task :normal => :environment do
        puts "引数はないです"
    end

    task :with_arg, [:hoge, :fuga] => :environment do |task, args|
        puts "一つ目は#{args[:hoge]}で二つ目は#{args[:fuga]}です"
    end
end

引数指定して実行

さっそく実行してみると、引数ありの場合zshに怒られて実行できません。。

$ rake my_task:normal
引数はないです
$ rake my_task:with_arg[one,two]
zsh: no matches found: my_task:with_arg[one,two]

zshでは括弧[]エスケープするか、クォーテーションで囲むかの2通りの方法があります。

$ rake 'my_task:with_arg[one,two]'
一つ目はoneで二つ目はtwoです
$ rake my_task:with_arg\[one,two\]
一つ目はoneで二つ目はtwoです

個人的にはクォーテーションのほうが好き。

参考