تُرفق macOS الآن zsh كغلاف افتراضي، مما يعني أن هذه المشكلة تظهر بشكل متكرر.
في zsh:
% bin/rake plugin:spec[discourse-solved]
zsh: no matches found: plugin:spec[discourse-solved]
لماذا يحدث هذا؟
السبب في ذلك هو أن الأقواس المربعة تُفسَّر على أنها نمط glob. في bash، يفشل نمط glob في التطابق مع أي شيء، لكن الأمر ينفذ على أي حال ويعمل. أما في zsh، فيتم رفع خطأ ولا يتم تنفيذ rake.
ولتوضيح ذلك، في 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
يمكنك تكرار سلوك zsh بتفعيل خيار failglob في 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]
(شكرًا لـ @j.jaffeux و @pmusaraj على توجيهي في الاتجاه الصحيح، ولـ @supermathie على أمثلة bash
)
لجعل الأمر يعمل كما هو متوقع، يجب عليك وضع حجة rake كاملة بين علامات اقتباس
% bin/rake "plugin:spec[discourse-solved]"