wget для друку помилок, але нічого іншого


27

Як я можу мати помилки друку wget, але нічого іншого?

У поведінці за замовчуванням вона показує смугу прогресу та багато чого іншого.

У версії --no-verbose все ще друкується один рядок на завантажений файл, цього я не хочу.

Параметр --quiet призводить до того, що він повністю тихий, навіть у випадку помилки, він нічого не друкує.

Чи існує режим, в якому він друкує помилки, але нічого іншого?

Відповіді:


17

У цьому питанні є дуже хороші відповіді, не забудьте їх перевірити, але що я зробив, це це:

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

Це була єдина відповідь, яка працювала для мене з 16.04 ubuntu bash.
Лігемер

17

Використовуйте curl, без жодного сенсу здогадуючись, як виглядатиме кожна помилка.

[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 mode. Don’t show progress meter or error messages. Makes Curl mute.

-S / - показ-помилка

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

І якщо вам потрібен stderr на stdout чомусь.

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

1
На жаль, це не обробляє типові помилки HTTP (наприклад, 404 помилки придушуються таким чином), тоді як метод hacky wget робить.
процес91

Downvote: Хоча ваша пропозиція правдоподібна, вона не відповідає на питання.
Стефан Ріхтер

Додати -f / - не відображається повідомлення про помилку, якщо сервер повертає код помилки (наприклад, 404)
Hontvári Levente

Це може бути чудовою відповіддю, якщо питання стосується curl або якщо curl мав паритет функції wget. На жаль, так і не відбувається ..
dfc

4

Я не бачу варіанту для цього. Чи потрібно знати, що таке помилка чи просто, якщо вона сталася? Якщо вам просто потрібно знати, чи сталася помилка, ви можете скористатися статусом виходу.

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

Або можливо:

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

І ви можете змінити кота на команду grep, якщо хочете пофантазувати ...


3
Більш простий спосіб: wget -o logfile <url> || cat logfile
kolypto

Більш простий спосіб гірший, оскільки ви, мабуть, хочете вийти або зробити щось інше при помилці, окрім відображення повідомлення про помилку.
Сем Уоткінс

2

Перенаправити стандартний вихід на /dev/null, але зберегти вихід помилки у виборі оболонки.

У bash це було б:

wget [wget options] > /dev/null

Редагувати: Так wgetпогано поводиться. Якщо всі помилки містять у них слово "помилка", ви могли б передатиgrep

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

wget, здається, надсилає все до stderr.
pupeno

Я додав ще один варіант, використовуючи grepлише помилки виводу
Ben S

stderrне проходить через трубу без сторонньої допомоги.
Призупинено до подальшого повідомлення.

1
Врешті-решт я використав wget [параметри wget] 2> & 1 | grep -i "не вдалося \ | помилка"
pupeno

1

Оскільки wgetвиводить усі повідомлення увімкнено stderr, вам доведеться скористатися перенаправленням, перш ніж ви зможете передати його на grep:

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

Це передбачає, що wgetпочинається рядки помилок з "wget:".


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

працює. Але він завжди скорочує вихідний файл, який ви можете або не хочете.

Завиток краще:

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

У разі помилки він не змінює вихідний файл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.