macOS ahora incluye zsh como shell predeterminado, lo que significa que este problema surge con bastante frecuencia.
En zsh:
% bin/rake plugin:spec[discourse-solved]
zsh: no matches found: plugin:spec[discourse-solved]
¿Por qué ocurre esto?
Esto se debe a que los corchetes se interpretan como un patrón glob. En bash, el patrón glob falla al no encontrar coincidencias, pero el comando se ejecuta de todos modos y funciona. En cambio, zsh genera un error y no ejecuta rake.
Para ilustrarlo, en 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
Puedes replicar el comportamiento de zsh activando la opción failglob en 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]
(gracias a @j.jaffeux y @pmusaraj por indicarme la dirección correcta, y a @supermathie por los ejemplos en bash
)
Para que funcione como se espera, debes envolver todo el argumento de rake entre comillas:
% bin/rake "plugin:spec[discourse-solved]"