O macOS agora vem com zsh como shell padrão, o que significa que esse problema surge com bastante regularidade.
No zsh:
% bin/rake plugin:spec[discourse-solved]
zsh: no matches found: plugin:spec[discourse-solved]
Por que isso acontece?
Isso ocorre porque os colchetes são interpretados como um padrão glob. No bash, o padrão glob falha ao encontrar uma correspondência, mas o comando é executado de qualquer maneira e funciona. Em contraste, o zsh gera um erro e não executa o rake.
Para ilustrar, no bash:
○ → echo bin/rake plugin:spec[discourse-solved]
bin/rake plugin:spec[discourse-solved]
○ → touch plugin:specd
○ → echo bin/rake plugin:spec[discourse-solved]
bin/rake plugin:specd
Você pode replicar o comportamento do zsh ativando a opção failglob no bash:
○ → echo bin/rake plugin:spec[discourse-solved]
bin/rake plugin:spec[discourse-solved]
○ → shopt -s failglob
○ → echo bin/rake plugin:spec[discourse-solved]
bash: no match: plugin:spec[discourse-solved]
(obrigado a @j.jaffeux e @pmusaraj por me apontarem na direção certa, e a @supermathie pelos exemplos em bash
)
Para fazer com que funcione conforme o esperado, você precisa envolver todo o argumento do rake entre aspas
% bin/rake "plugin:spec[discourse-solved]"