deseja imprimir erros, mas nada diferente


27

Como posso ter erros de impressão wget, mas nada de outra maneira?

No comportamento padrão, mostra uma barra de progresso e muitas coisas.

Na versão --no-verbose ainda imprime uma linha por arquivo baixado, isso eu não quero.

A opção --quiet faz com que seja totalmente silencioso, mesmo no caso de um erro, não imprime nada.

Existe um modo no qual ele imprime erros, mas nada mais?

Respostas:


17

Há respostas muito boas nesta pergunta, verifique-as, mas o que eu fiz foi o seguinte:

wget [wget options] 2>&1 | grep -i "failed\|error"

Esta foi a única resposta que funcionou para mim com o 16.04 ubuntu bash.
Ligemer

17

Use curl, não adianta adivinhar como serão todos os erros.

[wizard@laptop ~] curl -s -S http://www.google.coccm/ > /dev/null && echo "TRUE"
curl: (6) Couldn't resolve host 'www.google.coccm'
[wizard@laptop ~]$ curl -s -S http://www.google.com/ > /dev/null && echo "TRUE"
TRUE

-s / - silencioso

Silent mode. Don’t show progress meter or error messages. Makes Curl mute.

-S / - erro de exibição

When used with -s it makes curl show error message if it fails.

E se você precisar do stderr no stdout por algum motivo.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null

11
Infelizmente, isso não lida com erros típicos de HTTP (por exemplo, erros 404 são suprimidos dessa maneira), enquanto o método hacky wget faz.
precisa saber é o seguinte

Voto a favor: Embora sua sugestão seja plausível, ela não responde à pergunta.
Stephan Richter

Adicionar -f / - deixar de exibir uma mensagem de erro se o servidor retorna um código de erro (por exemplo, 404)
Hontvári Levente

Essa poderia ser uma ótima resposta se, a pergunta fosse sobre ondulação ou se a ondulação tivesse paridade de recurso com o wget. Infelizmente, também não é o caso ..
dfc 31/08

4

Não vejo uma opção para isso. Você precisa saber qual é o erro ou apenas se aconteceu? Se você precisar apenas saber se houve erro, poderá usar o status de saída.

if ! wget -o /dev/null www.google.com/flasfsdfsdf; then
    echo 'Oops!'
fi

Ou talvez:

if ! wget -o logfile www.google.com/flasfsdfsdf; then
    cat logfile
fi

E você pode mudar o gato para um comando grep, se você quiser ser chique ...


3
Maneira mais simples: wget -o logfile <url> || cat logfile
kolypto

A maneira mais simples é pior, pois você provavelmente deseja sair ou fazer algo diferente em caso de erro, além de exibir a mensagem de erro.
Sam Watkins

2

Redirecione a saída padrão para /dev/null, mas mantenha a saída de erro na sua escolha de shell.

No bash, isso seria:

wget [wget options] > /dev/null

Edit: Então se wgetcomporta mal. Se todos os erros contiverem a palavra "erro", você poderá canalizar paragrep

wget [wget options] 2>&1 | grep -i "error"

O wget parece enviar tudo para o stderr.
Pupeno 02/10/09

Eu adicionei uma outra opção usando grepa erros de saída apenas
Ben S

stderrnão passa pelo cano sem ajuda.
Pausado até novo aviso.

11
No final, usei o wget [opções do wget] 2> & 1 | grep -i "falhou \ | erro"
pupeno 02/10

1

Como wgetgera todas as mensagens stderr, você precisa usar o redirecionamento antes de canalizá-lo para o grep:

wget [options] 2>&1 | grep "^wget:"

Isso pressupõe que wgetcomeça suas linhas de erro com "wget:".


1
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

trabalho. Mas ele sempre trunca o arquivo de saída, que você pode ou não desejar.

Curl é melhor:

curl --fail --silent --show-error -o /tmp/a http://example.com

No caso de um erro, ele não modifica o arquivo de saída.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.