Apt-get * comodín con ZSH

15

ZSH:

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

Funciona en Bash. Cuál es el problema ? :-RE

mirandalol
fuente

Respuestas:

13

Sí, zshy bashcomportarse de manera diferente a este respecto.

En zsh, cuando dice " ubuntuone-*", busca en su directorio de trabajo actual los archivos que comienzan con ubuntuone-- ya que no encuentra ninguno, dice " no matches" y no ejecuta el comando.

bashtoma un rumbo diferente: también busca archivos que comienzan ubuntuone-en el directorio de trabajo actual, pero si no encuentra ninguno, se dice a sí mismo: "Tal vez el programa que estoy invocando sabe cómo manejar el comodín", y así lo pasa " ubuntuone-*"fuera sudo apt-getcomo un argumento literal.

Si tenía un archivo en su directorio de trabajo actual llamado ubuntuone-ffdjhjer, bash intentaría ejecutarse sudo apt-get remove --purge ubuntuone-ffdjhjer, lo que probablemente fallará.

En zsh(y en bash) puede usar comillas simples para indicarle que no expanda el comodín sino que lo pase, como en:

sudo apt-get remove --purge 'ubuntuone-*'
David Purdue
fuente
2
¿Puedo hacer que zsh se comporte como Bash de esa manera?
mirandalol
No lo sé, pero la pequeña investigación que he hecho hasta ahora sugiere que no. En cualquier caso, siempre es mejor (incluso en bash) encerrar argumentos entre comillas simples si no desea que el shell expanda comodines, porque incluso en bash el comando no hará lo que desea si un archivo en el CWD coincide con el comodín. Por ejemplo, siempre dpkg -l 'linux*'escribo bash para ver todos los núcleos instalados.
David Purdue
10

Puede ser un poco tarde esta respuesta, pero hay una manera de solucionarlo. Desde la línea de comando ejecutar:

unsetopt no_match
Tanel Tammik
fuente
esto funciona genial
neaumusic
O shopt -s failgloben basha fijar bash por lo que se comporta como zshy otros proyectiles modernos como fisho tcsh que se han fijado que misfeature de la Bourne shell mediante el cual un comando todavía puede funcionar incluso si los globos no coinciden.
Stéphane Chazelas
@ StéphaneChazelas yoda
OpenCoderX
1

Hay otra forma de evitar la expansión en zsh, que prefiero a las comillas:

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