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?

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"

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

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ę ...


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"

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:”.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.