macOS ora include zsh come shell predefinita, il che significa che questo problema si presenta abbastanza regolarmente.
In zsh:
% bin/rake plugin:spec[discourse-solved]
zsh: no matches found: plugin:spec[discourse-solved]
Perché succede questo?
Questo accade perché le parentesi quadre vengono interpretate come un pattern glob. In bash, il glob non riesce a trovare una corrispondenza, ma il comando viene comunque eseguito e funziona. Al contrario, zsh genera un errore e non esegue rake.
Per illustrare, in 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
Puoi replicare il comportamento di zsh abilitando l’opzione failglob in 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]
(grazie a @j.jaffeux e @pmusaraj per avermi indicato la direzione giusta, e a @supermathie per gli esempi bash
)
Per farlo funzionare come previsto, è necessario racchiudere l’intero argomento di rake tra virgolette
% bin/rake "plugin:spec[discourse-solved]"
