wget per stampare errori, ma niente altrimenti


27

Come posso avere errori di stampa di wget, ma niente altrimenti?

Nel comportamento predefinito, mostra una barra di avanzamento e molte cose.

Nella versione --no-verbose stampa ancora una riga per file scaricato, questo non lo voglio.

L'opzione --quiet lo rende totalmente silenzioso, anche in caso di errore, non stampa nulla.

Esiste una modalità in cui stampa gli errori, ma nient'altro?

Risposte:


17

Ci sono ottime risposte in questa domanda, assicurati di controllarle, ma quello che ho fatto è questo:

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

Questa è stata l'unica risposta che ha funzionato per me con 16.04 Ubuntu Bash.
Ligemer,

17

Usa l'arricciatura, inutile indovinare come sarà ogni errore.

[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 / - silent

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

-S / - show-errore

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

E se hai bisogno di stderr su stdout per qualche motivo.

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

1
Sfortunatamente questo non gestisce i tipici errori HTTP (es. 404 errori vengono eliminati in questo modo), mentre il metodo hacky wget lo fa.
process91,

Downvote: sebbene il tuo suggerimento sia plausibile, non risponde alla domanda.
Stephan Richter,

Aggiungi -f / -
impossibile

Questa potrebbe essere un'ottima risposta se, la domanda riguardava il ricciolo, o se il ricciolo avesse la parità di funzionalità con wget. Sfortunatamente non è nemmeno il caso ...
dfc

4

Non vedo un'opzione per quello. Devi sapere qual è l'errore o solo se si è verificato? Se ti capita solo di sapere se si è verificato un errore, puoi utilizzare lo stato di uscita.

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

O forse:

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

E puoi cambiare il gatto in un comando grep se vuoi avere fantasia ...


3
Modo più semplice: wget -o logfile <url> || cat logfile
kolypto

Il modo più semplice è peggio poiché probabilmente si desidera uscire o fare qualcosa di diverso in caso di errore, oltre a visualizzare il messaggio di errore.
Sam Watkins,

2

Reindirizzare l'output standard su /dev/null, ma mantenere l'output dell'errore nella shell scelta.

In bash questo sarebbe:

wget [wget options] > /dev/null

Modifica: così si wgetcomporta male. Se tutti gli errori contengono la parola "errore", è possibile eseguire il pipegrep

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

wget sembra inviare tutto a stderr.
pupeno,

Ho aggiunto un'altra opzione utilizzando grepsolo per generare errori
Ben S

stderrnon passa attraverso il tubo senza aiuto.
In pausa fino a nuovo avviso.

1
Alla fine ho usato wget [opzioni wget] 2> & 1 | grep -i "failed \ | error"
pupeno

1

Dal momento che wgetgenera tutti i messaggi stderr, devi usare il reindirizzamento prima di poter reindirizzarlo a grep:

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

Ciò presuppone che wgetinizi le sue righe di errore con "wget:".


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

lavori. Ma tronca sempre il file di output, che potrebbe essere utile o meno.

Il ricciolo è meglio:

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

In caso di errore non modifica il file di output.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.