wget Fehler zu drucken, aber sonst nichts

27

Wie kann ich wget Druckfehler haben, aber sonst nichts?

In der Standardeinstellung werden ein Fortschrittsbalken und viele Dinge angezeigt.

In der --no-verbose-Version wird immer noch eine Zeile pro heruntergeladene Datei gedruckt, das möchte ich nicht.

Die Option --quiet bewirkt, dass es absolut leise ist, selbst wenn ein Fehler auftritt, wird nichts gedruckt.

Gibt es einen Modus, in dem Fehler ausgegeben werden, aber sonst nichts?

pupeno
quelle

Antworten:

17

Es gibt sehr gute Antworten auf diese Frage. Sehen Sie sie sich unbedingt an, aber ich habe Folgendes getan:

wget [wget options] 2>&1 | grep -i "failed\|error"
pupeno
quelle
Dies war die einzige Antwort, die mit 16.04 Ubuntu Bash für mich funktioniert hat.
Ligemer
17

Verwenden Sie Curl, und raten Sie nicht, wie jeder Fehler aussehen wird.

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

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

-S / - Show-Fehler

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

Und wenn Sie aus irgendeinem Grund stderr on stdout benötigen.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null
Reconbot
quelle
1
Leider behandelt dies keine typischen HTTP-Fehler (z. B. 404-Fehler werden auf diese Weise unterdrückt), wohingegen dies bei der Hacky-Wget-Methode der Fall ist.
Prozess91
Downvote: Obwohl Ihr Vorschlag plausibel ist, beantwortet er die Frage nicht.
Stephan Richter
Add -f / - Fehler beim Anzeigen einer Fehlermeldung, wenn der Server einen Fehlercode zurückgibt (z. B. 404)
Hontvári Levente
Dies könnte eine großartige Antwort sein, wenn die Frage nach der Wellung lautete oder wenn die Wellung eine Feature-Parität mit wget aufwies. Leider ist dies auch nicht der Fall.
DFC
4

Ich sehe keine Option dafür. Müssen Sie wissen, was der Fehler ist, oder nur, wenn es passiert ist? Wenn Sie nur wissen müssen, ob ein Fehler aufgetreten ist, können Sie den Exit-Status verwenden.

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

Oder vielleicht:

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

Und Sie können die Katze in einen Grep-Befehl ändern, wenn Sie Lust haben ...

Kyle Brandt
quelle
3
Einfacher geht es nicht: wget -o logfile <url> || cat logfile
kolypto
Die einfachere Methode ist schlechter, da Sie möglicherweise nicht nur die Fehlermeldung anzeigen, sondern auch das Programm beenden oder eine andere Aktion ausführen möchten.
Sam Watkins
2

Leitet die Standardausgabe an um /dev/null, behält aber die Fehlerausgabe in der von Ihnen gewählten Shell bei.

In der Bash wäre dies:

wget [wget options] > /dev/null

Edit: Also wgetbenimmt sich schlecht. Wenn alle Fehler das Wort "Fehler" enthalten, können Sie weiterleitengrep

wget [wget options] 2>&1 | grep -i "error"
Ben S
quelle
wget scheint alles an stderr zu schicken.
pupeno
Ich habe eine weitere Option hinzugefügt, grepdie nur Fehler ausgibt
Ben S
stderrgeht nicht ohne Hilfe durch die Leitung.
Bis auf weiteres angehalten.
1
Am Ende habe ich wget [wget options] 2> & 1 | verwendet grep -i "failed \ | error"
pupeno
1

Da wgetalle Nachrichten an ausgegeben werden stderr, müssen Sie die Umleitung verwenden, bevor Sie sie an grep weiterleiten können:

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

Dies setzt voraus, dass wgetdie Fehlerzeilen mit "wget:" beginnen.

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

funktioniert. Es schneidet jedoch immer die Ausgabedatei ab, die Sie möglicherweise oder möglicherweise nicht möchten.

Locke ist besser:

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

Im Fehlerfall wird die Ausgabedatei nicht geändert.

Hontvári Levente
quelle