ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Funktioniert auf Bash. Was ist das Problem ? :-D
ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Funktioniert auf Bash. Was ist das Problem ? :-D
Antworten:
Ja, zsh
und bash
verhalten Sie sich in dieser Hinsicht anders.
In zsh
, wenn Sie sagen , „ ubuntuone-*
“ es für Dateien in Ihrem aktuellen Arbeitsverzeichnis sucht , die mit beginnen ubuntuone-
- da es eine nicht finden, heißt es „ no matches
“ , und führen Sie den Befehl nicht.
bash
Anders verhält es sich - es sucht auch nach Dateien, die ubuntuone-
im aktuellen Arbeitsverzeichnis beginnen, aber wenn es keine findet, sagt es sich: "Vielleicht weiß das von mir aufgerufene Programm, wie es mit dem Platzhalter umgeht" und geht so weiter. ubuntuone-*
"off to sudo apt-get
als wörtliches Argument.
Wenn Sie eine Datei in Ihrem aktuellen Arbeitsverzeichnis ubuntuone-ffdjhjer
hätten sudo apt-get remove --purge ubuntuone-ffdjhjer
, die aufgerufen wird , würde bash versuchen, sie auszuführen , was wahrscheinlich fehlschlagen würde.
In zsh
(und in bash
) können Sie einfache Anführungszeichen verwenden, um anzugeben, dass der Platzhalter nicht erweitert, sondern weitergegeben werden soll, wie in:
sudo apt-get remove --purge 'ubuntuone-*'
dpkg -l 'linux*'
tippe zB immer bash ein, um alle installierten Kernel zu sehen.
Diese Antwort könnte etwas spät sein, aber es gibt eine Möglichkeit, dies zu beheben. Von der Kommandozeile aus ausführen:
unsetopt no_match
shopt -s failglob
um bash
zu beheben bash
, wie es sich verhält, zsh
und andere moderne Shells, wie fish
oder tcsh
die dieses Fehlverhalten der Bourne-Shell behoben haben, wobei ein Befehl möglicherweise immer noch ausgeführt wird, selbst wenn die Globs nicht übereinstimmen.