Deve passar urls entre aspas

0

Estou tentando passar um URL para mpv para que ele seja reproduzido como um fluxo de rede.

Isso pode ser feito em bash com a seguinte sintaxe:

$ mpv http://myvideosite.com

No entanto, zsh deseja avaliar o URL como (presumivelmente) um caminho de arquivo. Correndo

% mpv http://myvideosite.com

recebe a seguinte resposta:

zsh: no matches found: http://myvideosite.com

e um código de retorno de 1.

Rodando

% mpv "http://myvideosite.com"

é executado conforme o esperado.

O zsh não trata os argumentos como strings?

    
por 2mac 18.07.2014 / 04:11

1 resposta

5

Suponho que você tenha aparado inadvertidamente a parte importante de suas linhas de comando aqui: os URLs em questão contêm um caractere ? (ou * ). ? e * são caracteres especiais correspondentes ao shell. ? corresponde a um único caractere em um nome de arquivo e * corresponde a muitos. Quando zsh diz:

zsh: no matches found: http://myvideosite.com?video=123

está dizendo que não há nenhum arquivo chamado http://myvideosite.com?video=123 acessível no diretório atual.

Em zsh, por padrão, uma expansão com falha como essa é um erro, mas no Bash não é: o padrão com falha é simplesmente deixado como um argumento exatamente como foi escrito. O comportamento do zsh é mais seguro, pois você não pode escrever um comando que secretamente não faz o que você quis dizer porque faltava um arquivo, mas você pode alterá-lo para ter o comportamento do Bash se quiser:

setopt nonomatch

A opção NOMATCH está ativada por padrão e causa os erros que você estava vendo. Se você desativá-lo com setopt nonomatch , todas as expansões de glob com falha serão deixadas intactas na linha de comando:

$ echo foo?bar
zsh: no matches found: foo?bar
$ setopt nonomatch
$ echo foo?bar
foo?bar

Isso resolverá seu caso de uso original. Em geral, será melhor citar argumentos com caracteres especiais, a fim de evitar erros onde existe um arquivo com um nome correspondente, ou não existe quando você pensou que existia.

    
por 18.07.2014 / 04:44