web-dev-qa-db-fra.com

Apt-get * wildcard avec ZSH

ZSH:

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

Fonctionne sur Bash. Quel est le problème ? :-RÉ

15
mirandalol

Oui, zsh et bash se comportent différemment à cet égard.

Dans zsh, lorsque vous dites "ubuntuone-*", il recherche dans votre répertoire de travail actuel les fichiers commençant par ubuntuone-. Comme il n'en trouve pas, il affiche "no matches "et n'exécute pas la commande.

bash adopte une approche différente - il recherche également les fichiers commençant par ubuntuone- dans le répertoire de travail en cours, mais s’il ne trouve aucun fichier, il se dit: "Le programme que j’appelle sait peut-être comment pour gérer le caractère générique ", et passe ainsi" ubuntuone-*Sudo apt-get en tant qu'argument littéral.

Si vous avez un fichier dans votre répertoire de travail actuel appelé ubuntuone-ffdjhjer, alors bash essaiera d'exécuter Sudo apt-get remove --purge ubuntuone-ffdjhjer, ce qui échouera probablement.

Dans zsh (et dans bash), vous pouvez utiliser des guillemets simples pour lui indiquer de ne pas développer le caractère générique, mais de le transmettre, comme dans:

Sudo apt-get remove --purge 'ubuntuone-*'
13
David Purdue

Peut-être un peu tard cette réponse, mais il existe un moyen de résoudre ce problème. Depuis la ligne de commande, exécutez:

unsetopt no_match
10
Tanel Tammik

Il existe un autre moyen d'empêcher l'expansion dans zsh, que je préfère aux citations:

Sudo apt-get remove --purge ubuntuone-\*
1
dlussky