ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Działa na Bash. Jaki jest problem ? :-RE
ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Działa na Bash. Jaki jest problem ? :-RE
Odpowiedzi:
Tak, zsh
i bash
zachowuj się inaczej w tym zakresie.
W zsh
, kiedy mówisz „ ubuntuone-*
” wygląda w bieżącym katalogu roboczym dla plików, które zaczynają sięubuntuone-
- ponieważ nie znajdziesz, to mówi „ no matches
” i nie uruchomić komendę.
bash
ma inną przyczepność - szuka również plików, które zaczynają się ubuntuone-
w bieżącym katalogu roboczym, ale jeśli go nie znajdzie, mówi do siebie: „Może program, który wywołuję, wie, jak obsługiwać znak wieloznaczny”, a więc przekazuje ” ubuntuone-*
„ sudo apt-get
jako dosłowny argument.
Jeśli masz plik w bieżącym katalogu roboczym o nazwie ubuntuone-ffdjhjer
, bash spróbuje wykonać sudo apt-get remove --purge ubuntuone-ffdjhjer
, co prawdopodobnie się nie powiedzie.
W zsh
(i w bash
) możesz użyć pojedynczych cudzysłowów, aby powiedzieć mu, aby nie rozwijał symbolu wieloznacznego, ale przekazał go, jak w:
sudo apt-get remove --purge 'ubuntuone-*'
dpkg -l 'linux*'
bash, aby zobaczyć wszystkie zainstalowane jądra.
Być może trochę spóźni się ta odpowiedź, ale istnieje sposób, aby to naprawić. Z wiersza poleceń wykonaj:
unsetopt no_match
shopt -s failglob
w bash
celu poprawki bash
, dlatego zachowuje się jak zsh
i inne nowoczesne pociski podoba fish
lub tcsh
które zostały ustalone, że misfeature z Bourne shell czym komenda może nadal działać, nawet jeśli globs nie pasuje.