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


27

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

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

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

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

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

Ответы:


17

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

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

Это был единственный ответ, который работал для меня с 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

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