Quero baixar um arquivo com o Wget , mas, de acordo com a filosofia usual do UNIX, não quero que ele produza nada se o download for bem-sucedido. No entanto, se o download falhar, quero uma mensagem de erro.
A -q
opção suprime toda a saída, incluindo mensagens de erro. Se eu incluir a -nv
opção, o Wget ainda imprime (no stderr):
2012-05-03 16:17:05 URL:http://example.net/ [2966] -> "index.html" [1]
Como posso remover até essa saída, mas ainda receber mensagens de erro?
error_log=$(wget -nv example.net 2>&1) || echo $error_log
é uma solução mais elegante, mas ainda desajeitada.Tente em
curl
vez disso:Versão longa:
Usuários do GNOME podem tentar Gvfs:
fonte
--fail
? não faria sentido tratar os erros HTTP como algo que você gostaria de acessar no stderr?--fail
e--show-error
faz.Como atualmente toda a saída do wget vai para o stderr, parece que para resolver isso 'da maneira elegante' você teria que corrigir a fonte do wget.
O design da fonte wget determina a diferença no nível de verbosidade entre as mensagens, em vez de uma simples divisão entre mensagem de erro e não de mensagem de erro.
Há um erro em aberto sobre este http://savannah.gnu.org/bugs/?33839 , e também há algumas discussões mais antigas. Aqui está um patch sugerido http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html e aqui há uma resposta de Hrvoje Niksic sobre este http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .
Fora isso, é claro que há a boa solução que você propôs em um comentário à solução menos elegante de Foon.
fonte
Você também pode canalizar a saída
grep
e filtrar a mensagem de sucesso.Isso deve funcionar:
fonte