curinga de Apt-get * com ZSH

12

ZSH:

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

Funciona no Bash. Qual é o problema ? :-D

    
por mirandalol 21.08.2013 / 07:04

3 respostas

11

Sim, zsh e bash se comportam de maneira diferente a esse respeito.

Em zsh , quando você diz " ubuntuone-* ", ele procura no diretório de trabalho atual por arquivos que começam com ubuntuone- - como não encontra nenhum, diz " no matches " e não é executado o comando.

bash adota uma abordagem diferente - também procura arquivos que iniciam com ubuntuone- no diretório de trabalho atual, mas, se não encontrar nenhum, diz a si mesmo: "Talvez o programa que estou invocando saiba como manipule o caractere curinga "e assim passa" ubuntuone-* "para sudo apt-get como um argumento literal.

Se você tivesse um arquivo em seu diretório de trabalho atual chamado ubuntuone-ffdjhjer , então o bash tentaria executar sudo apt-get remove --purge ubuntuone-ffdjhjer , o que provavelmente falharia.

Em zsh (e em bash ) você pode usar aspas simples para dizer a ele para não expandir o curinga, mas para transmiti-lo, como em:

sudo apt-get remove --purge 'ubuntuone-*'
    
por David Purdue 21.08.2013 / 07:13
8

Pode estar um pouco atrasado nesta resposta, mas há uma maneira de corrigir isso. A partir da linha de comando, execute:

unsetopt no_match
    
por Tanel Tammik 11.06.2014 / 01:36
1

Há outra maneira de impedir a expansão no zsh, que eu prefiro aspas:

sudo apt-get remove --purge ubuntuone-\*
    
por dlussky 05.02.2015 / 18:06

Tags