Carattere jolly Apt-get * con ZSH


15

ZSH:

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

Funziona su Bash. Qual è il problema ? :-D

Risposte:


13

Sì, zshe bashcomportati diversamente in questo senso.

In zsh, quando dici " ubuntuone-*" cerca nella directory di lavoro corrente i file che iniziano con ubuntuone-- poiché non ne trova nessuno, dice " no matches" e non esegue il comando.

bashprende una virata diversa: cerca anche i file che iniziano con ubuntuone-l'attuale directory di lavoro, ma se non ne trova nessuno dice a se stesso: "Forse il programma che sto invocando sa come gestire il carattere jolly" e quindi passa " ubuntuone-*"via sudo apt-getcome argomento letterale.

Se avessi un file nella directory di lavoro corrente chiamato ubuntuone-ffdjhjer, allora bash proverà ad eseguire sudo apt-get remove --purge ubuntuone-ffdjhjer, il che probabilmente fallirebbe.

In zsh(e in bash) puoi usare virgolette singole per dirgli di non espandere il carattere jolly ma di trasmetterlo, come in:

sudo apt-get remove --purge 'ubuntuone-*'

2
Posso fare in modo che zsh si comporti come Bash in quel modo?
mirandalol,

Non lo so, ma la piccola ricerca che ho fatto finora suggerisce di no. In ogni caso, è sempre meglio (anche in bash) racchiudere gli argomenti tra virgolette singole se non si desidera che la shell espanda i caratteri jolly, perché anche in bash il comando non farà ciò che si desidera se un file nel CWD corrisponde al carattere jolly. ad esempio, digito sempre dpkg -l 'linux*'bash per vedere tutti i kernel installati.
David Purdue,

10

Potrebbe essere un po 'in ritardo questa risposta, ma c'è un modo per risolvere questo problema. Dalla riga di comando eseguire:

unsetopt no_match

funziona alla grande
neaumusica

O shopt -s failglobin basha fix bash così si comporta come zshe altre shell moderni come fisho tcsh che sono fissate che misfeature della Bourne shell per cui un comando può ancora essere eseguito anche se le gocce non corrisponde.
Stéphane Chazelas,

@ StéphaneChazelas yoda
OpenCoderX

1

Esistono altri modi per impedire l'espansione in zsh, che preferisco tra virgolette:

sudo apt-get remove --purge ubuntuone-\*
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.