macOS는 이제 기본적으로 zsh 셸을 사용하므로, 이 문제는 꽤 자주 발생합니다.
zsh에서:
% bin/rake plugin:spec[discourse-solved]
zsh: no matches found: plugin:spec[discourse-solved]
왜 이런 일이 발생하는가요?
이는 대괄호가 글롭 패턴으로 해석되기 때문입니다. bash에서는 글롭이 패턴에 일치하지 않더라도 명령이 그대로 실행되어 정상적으로 동작합니다. 반면 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
bash에서 failglob 옵션을 활성화하면 zsh의 동작을 재현할 수 있습니다:
○ → 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에게 올바른 방향을 알려주셔서 감사드리며, bash 예제는 @supermathie에게 감사드립니다
)
기대하는 대로 동작하려면 rake 인수를 전체적으로 따옴표로 감싸야 합니다.
% bin/rake "plugin:spec[discourse-solved]"