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.