wget drukować błędy, ale nic poza tym

27

Jak mogę mieć błędy drukowania wget, ale nic poza tym?

W domyślnym zachowaniu pokazuje pasek postępu i wiele innych rzeczy.

W wersji --no-verbose nadal drukuje jeden wiersz na pobrany plik, czego nie chcę.

Opcja --quiet powoduje, że jest całkowicie cichy, nawet w przypadku błędu nic nie drukuje.

Czy istnieje tryb, w którym drukuje błędy, ale nic więcej?

pupeno
źródło

Odpowiedzi:

17

W tym pytaniu są bardzo dobre odpowiedzi, koniecznie je sprawdź, ale zrobiłem to:

wget [wget options] 2>&1 | grep -i "failed\|error"
pupeno
źródło
To była jedyna odpowiedź, która działała dla mnie z 16.04 ubashu bash.
Ligemer,
17

Używaj zawijania, nie zgadując, jak będzie wyglądał każdy błąd.

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

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

-S / - pokaż błąd

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

A jeśli z jakiegoś powodu potrzebujesz stderr na stdout.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null
Rebbot
źródło
1
Niestety nie obsługuje to typowych błędów HTTP (np. Błędy 404 są pomijane w ten sposób), podczas gdy metoda hacky wget tak robi.
process91
Uwaga: Chociaż twoja sugestia jest wiarygodna, nie odpowiada na pytanie.
Stephan Richter
Dodaj -f / - nie wyświetla komunikatu o błędzie, jeśli serwer zwraca kod błędu (np. 404)
Hontvári Levente
To może być świetna odpowiedź, jeśli pytanie dotyczy curl lub jeśli curl miałby parzystość cech z wget. Niestety tak nie jest ..
dfc
4

Nie widzę takiej możliwości. Czy musisz wiedzieć, jaki jest błąd, czy po prostu jeśli się on zdarzył? Jeśli akurat potrzebujesz wiedzieć, czy wystąpił błąd, możesz użyć statusu wyjścia.

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

Albo może:

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

I możesz zmienić kota na polecenie grep, jeśli chcesz mieć ochotę ...

Kyle Brandt
źródło
3
Prostszy sposób: wget -o plik dziennika <url> || cat logfile
kolypto
Prostszy sposób jest gorszy, ponieważ oprócz wyświetlania komunikatu o błędzie prawdopodobnie chcesz wyjść lub zrobić coś innego po błędzie.
Sam Watkins,
2

Przekieruj standardowe wyjście /dev/null, ale zachowaj błąd przy wyborze powłoki.

W skrócie byłoby to:

wget [wget options] > /dev/null

Edycja: Więc wgetźle się zachowuje. Jeśli wszystkie błędy zawierają w sobie słowo „błąd”, możesz do niego potokowaćgrep

wget [wget options] 2>&1 | grep -i "error"
Ben S.
źródło
wget wydaje się wysyłać wszystko do stderr.
pupeno
Dodałem kolejną opcję używającą greptylko do wyświetlania błędów wyjściowych
Ben S
stderrnie przechodzi przez rurę bez pomocy.
Wstrzymano do odwołania.
1
Na koniec użyłem wget [opcje wget] 2> i 1 | grep -i "failed \ | error"
pupeno
1

Ponieważ wgetwszystkie wyjścia są włączone stderr, musisz użyć przekierowania, zanim będziesz mógł przesłać go do grep:

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

Zakłada się, że wgetlinie błędów zaczynają się od „wget:”.

Wstrzymano do odwołania.
źródło
1
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

Prace. Ale zawsze obcina plik wyjściowy, który możesz chcieć lub nie.

Zwijanie się jest lepsze:

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

W przypadku błędu nie modyfikuje pliku wyjściowego.

Hontvári Levente
źródło