Apt-get * Wildcard bei ZSH

15

ZSH:

sudo apt-get remove --purge ubuntuone-* 
ERROR: zsh: no matches found: ubuntuone-*

Funktioniert auf Bash. Was ist das Problem ? :-D

Mirandalol
quelle

Antworten:

13

Ja, zshund bashverhalten 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.

bashAnders 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-getals wörtliches Argument.

Wenn Sie eine Datei in Ihrem aktuellen Arbeitsverzeichnis ubuntuone-ffdjhjerhä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-*'
David Purdue
quelle
2
Kann ich zsh auf diese Weise dazu bringen, sich als Bash zu verhalten?
Mirandalol
Ich weiß es nicht, aber die wenigen Nachforschungen, die ich bisher angestellt habe, lassen darauf schließen, dass dies nicht der Fall ist. In jedem Fall ist es immer besser (auch in Bash), Argumente in einfache Anführungszeichen zu setzen, wenn Sie nicht möchten, dass die Shell Platzhalterzeichen erweitert, da der Befehl selbst in Bash nicht das tut, was Sie wollen, wenn eine Datei in der CWD enthalten ist stimmt mit dem Platzhalter überein. Ich dpkg -l 'linux*'tippe zB immer bash ein, um alle installierten Kernel zu sehen.
David Purdue
10

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
Tanel Tammik
quelle
das funktioniert
super
Oder shopt -s failglobum bashzu beheben bash , wie es sich verhält, zshund andere moderne Shells, wie fishoder 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.
Stéphane Chazelas
@ StéphaneChazelas yoda
OpenCoderX
1

Es gibt eine andere Möglichkeit, die Erweiterung von zsh zu verhindern, die ich Anführungszeichen vorziehe:

sudo apt-get remove --purge ubuntuone-\*
dlussky
quelle