wget pentru a imprima erori, dar nimic altceva (Administrarea sistemului, Wget)

Pablo a intrebat.

Cum pot face ca wget să tipărească erori, dar nimic în rest?

În comportamentul implicit, arată o bară de progres și o mulțime de lucruri.

În versiunea –no-verbose încă mai tipărește câte o linie pentru fiecare fișier descărcat, lucru pe care nu-l vreau.

Opțiunea –quiet face ca acesta să fie total liniștit, chiar și în cazul unei erori, nu tipărește nimic.

Există un mod în care imprimă erorile, dar nimic altceva?

6 răspunsuri
Pablo

Există răspunsuri foarte bune la această întrebare, nu uitați să le verificați, dar ceea ce am făcut eu este următorul lucru:

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

Comentarii

  • Acesta a fost singurul răspuns care a funcționat pentru mine cu 16.04 ubuntu bash. –  > Por Ligemer.
reconbot

Folosiți curl, nu are rost să ghiciți cum va arăta fiecare eroare.

[[email protected] ~] curl -s -S http://www.google.coccm/ > /dev/null && echo "TRUE"
curl: (6) Couldn't resolve host 'www.google.coccm'
[[email protected] ~]$ 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-error

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

Și dacă aveți nevoie de stderr pe stdout din anumite motive.

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

Comentarii

  • Din păcate, acest lucru nu gestionează erorile HTTP tipice (de exemplu, erorile 404 sunt suprimate în acest mod), în timp ce metoda hacky wget o face. –  > Por proces91.
  • Downvote: Deși sugestia dvs. este plauzibilă, nu răspunde la întrebare. –  > Por Stephan Richter.
  • Adăugați -f/–fail pentru a afișa un mesaj de eroare în cazul în care serverul returnează un cod de eroare (de exemplu, 404) –  > Por Hontvári Levente.
  • Acesta ar putea fi un răspuns grozav dacă, întrebarea ar fi fost despre curl, sau dacă curl ar fi avut paritate de caracteristici cu wget. Din păcate, niciuna dintre acestea nu este cazul… –  > Por dfc.
Kyle Brandt

Nu văd o opțiune pentru asta. Trebuie să știți care este eroarea sau doar dacă s-a întâmplat? Dacă se întâmplă să aveți nevoie doar să știți dacă a existat o eroare, puteți utiliza starea de ieșire.

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

Sau, poate:

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

Și poți schimba cat-ul cu o comandă grep, dacă vrei să fii mai pretențios…

Comentarii

  • Un mod mai simplu: wget -o logfile <url> || cat logfile –  > Por kolypto.
  • Calea mai simplă este mai proastă, deoarece probabil doriți să ieșiți sau să faceți ceva diferit în caz de eroare, pe lângă afișarea mesajului de eroare. –  > Por Sam Watkins.
Hontvári Levente
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

funcționează. Dar trunchiază întotdeauna fișierul de ieșire, ceea ce s-ar putea să doriți sau nu.

Curl este mai bun:

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

În caz de eroare, nu modifică fișierul de ieșire.

Ben S

Redirecționați ieșirea standard către /dev/null, dar păstrați ieșirea de eroare în shell-ul ales de dumneavoastră.

În bash acest lucru ar fi:

wget [wget options] > /dev/null

Edit: Deci wget se comportă greșit. În cazul în care toate erorile conțin cuvântul „error”, ați putea trimite la grep

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

Comentarii

  • wget pare să trimită totul la stderr. –  > Por Pablo.
  • Am adăugat o altă opțiune folosind grep pentru a trimite doar erorile –  > Por Ben S.
  • stderr nu trece prin țeavă fără ajutor. –  > Por Dennis Williamson.
  • În cele din urmă am folosit wget [wget options] 2>&1 | grep -i „failed|error” – –  > Por Pablo.
Dennis Williamson

De la wget scoate toate mesajele pe stderr, trebuie să folosiți redirecționarea înainte de a le putea redirecționa către grep:

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

Acest lucru presupune că wget își începe liniile de eroare cu „wget:”.

Tags: