Wget для печати ошибок, но ничего другого

27

Как я могу иметь ошибки печати wget, но ничего другого?

В поведении по умолчанию, он показывает индикатор выполнения и многое другое.

В версии --no-verbose по-прежнему печатает одну строку на загруженный файл, этого я не хочу.

Опция --quiet заставляет его работать абсолютно тихо, даже в случае ошибки он ничего не печатает.

Есть ли режим, в котором он печатает ошибки, но больше ничего?

pupeno
источник

Ответы:

17

На этот вопрос есть очень хорошие ответы, обязательно ознакомьтесь с ними, но я сделал следующее:

wget [wget options] 2>&1 | grep -i "failed\|error"
pupeno
источник
Это был единственный ответ, который работал для меня с 16.04 Ubuntu Bash.
Ligemer
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
reconbot
источник
1
К сожалению, это не обрабатывает типичные ошибки HTTP (например, 404 ошибки подавляются таким образом), в то время как метод hacky wget делает.
process91
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> ||
журнал
Более простой способ хуже, так как вы, вероятно, хотите выйти или сделать что-то другое в случае ошибки, в дополнение к отображению сообщения об ошибке.
Сэм Уоткинс
2

Перенаправляйте стандартный вывод на /dev/null, но сохраняйте вывод ошибок в выбранной вами оболочке.

В bash это будет:

wget [wget options] > /dev/null

Редактировать: Так wgetплохо себя ведет. Если все ошибки содержат слово «ошибка», вы можете передатьgrep

wget [wget options] 2>&1 | grep -i "error"
Бен С
источник
Wget, похоже, отправляет все в stderr.
Пупено
Я добавил еще один вариант, используя grepтолько ошибки вывода
Ben S
stderrне проходит через трубу без посторонней помощи.
Приостановлено до дальнейшего уведомления.
1
В конце концов я использовал wget [wget options] 2> & 1 | grep -i "
fail
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

В случае ошибки он не изменяет выходной файл.

Хонтвари Левенте
источник