macOS est désormais livré avec zsh comme shell par défaut, ce qui signifie que ce problème se produit assez régulièrement.
Dans zsh :
% bin/rake plugin:spec[discourse-solved]
zsh: no matches found: plugin:spec[discourse-solved]
Pourquoi cela se produit-il ?
C’est parce que les crochets sont interprétés comme un motif de glob. Dans bash, le glob échoue à correspondre à un motif, mais la commande est tout de même exécutée et fonctionne. En revanche, zsh lève une erreur et n’exécute pas rake.
Pour illustrer, dans 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
Vous pouvez reproduire le comportement de zsh en activant l’option failglob dans 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]
(merci à @j.jaffeux et @pmusaraj pour m’avoir orienté dans la bonne direction, et à @supermathie pour les exemples bash
)
Pour que cela fonctionne comme prévu, vous devez entourer tout l’argument de rake de guillemets
% bin/rake "plugin:spec[discourse-solved]"