ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
Funktioniert auf Bash. Was ist das Problem ? :-D
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:
quelle
shopt -s failglob
umbash
zu behebenbash
, wie es sich verhält,zsh
und andere moderne Shells, wiefish
odertcsh
die dieses Fehlverhalten der Bourne-Shell behoben haben, wobei ein Befehl möglicherweise immer noch ausgeführt wird, selbst wenn die Globs nicht übereinstimmen.Es gibt eine andere Möglichkeit, die Erweiterung von zsh zu verhindern, die ich Anführungszeichen vorziehe:
quelle