zsh falha ao expandir o regex do apt-get?

1

O zsh parece falhar na expansão da expressão regular apt-get . Por exemplo, eu gostaria de instalar todos os pacotes que possuem o prefixo llvm-3.1 , e eu uso:

sudo apt-get install llvm-3.1*

Mas o zsh me diz isso:

zsh: no matches found: llvm-3.1*

zsh expande outros regrex bem ( ls * sempre lista all no-hidden files no diretório atual).

Eu também tentei bash ou mesmo sh (que na verdade é dash ), e ambos funcionam corretamente.

Então eu preciso definir algumas opções adicionais para fazer zsh funcionar para o apt-get? Agradecemos antecipadamente.

    
por Hongxu Chen 02.04.2013 / 06:50

1 resposta

3

Esses padrões não são regexps, são comumente referidos como padrões glob. E em nenhum caso o shell expandirá corretamente os padrões glob para nomes de pacotes para ser usado com o apt-get. Shells só expandirão padrões glob baseados em arquivos que estão presentes no seu sistema de arquivos local.

As outras camadas que você usou também não expandem esse padrão, mas sim do que relatar um erro eles passam o argumento como digitado para o apt-get que então é capaz de combinar o padrão em si e fazê-lo contra os nomes de pacotes disponíveis. Você pode obter esse comportamento do zsh usando:

unsetopt no_match

Mas seria melhor habituar-se a citar caracteres especiais como * quando você não quer que esses padrões sejam expandidos pelo shell. Se você aconteceu ter um arquivo que corresponda a esse padrão em seu diretório atual ao executar esse comando qualquer dessas conchas iria expandir o padrão para coincidir com esse arquivo antes de executar o apt-get, é improvável que ele forneça os resultados que você esperando.

Qualquer um dos itens a seguir funcionaria em qualquer um desses shells, mesmo se você tiver arquivos que correspondem ao padrão:

sudo apt-get install llvm-3.1\*
sudo apt-get install 'llvm-3.1*'
sudo apt-get install "llvm-3.1*"

Isso evitaria que o shell tentasse expandir o padrão incorretamente e para zsh, ele evitará a mensagem de erro se o padrão não puder ser expandido.

    
por 02.04.2013 / 07:42