ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Działa na Bash. Jaki jest problem ? :-RE
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:
źródło
shopt -s failglob
wbash
celu poprawkibash
, dlatego zachowuje się jakzsh
i inne nowoczesne pociski podobafish
lubtcsh
które zostały ustalone, że misfeature z Bourne shell czym komenda może nadal działać, nawet jeśli globs nie pasuje.Istnieje inny sposób zapobiegania ekspansji w Zsh, który wolę niż cytaty:
źródło