Я хочу загрузить файл с помощью Wget , но в соответствии с обычной философией UNIX я не хочу, чтобы он что-либо выводил, если загрузка прошла успешно. Однако, если загрузка не удалась, я хочу сообщение об ошибке.
-q
Опция подавляет весь вывод, в том числе сообщений об ошибках. Если я включу -nv
параметр вместо этого, Wget все еще печатает (на stderr):
2012-05-03 16:17:05 URL:http://example.net/ [2966] -> "index.html" [1]
Как я могу удалить даже этот вывод, но все равно получать сообщения об ошибках?
--fail
? разве не имеет смысла рассматривать ошибки HTTP как то, что вы хотели бы использовать в stderr?--fail
и--show-error
делает комбинация .Хромой взлом, если вы не можете получить лучший ответ:
(Файл 2> /tmp/err.log перенаправляет stderr в файл tmp; если wget возвращает 0 [success], в противном случае короткое замыкание || выводит значения журнала ошибок)
источник
error_log=$(wget -nv example.net 2>&1) || echo $error_log
это более элегантное решение, но все еще неуклюже.Поскольку в настоящее время весь вывод wget идет в stderr, кажется, что для решения этого «элегантного способа» вам нужно будет исправить исходный код wget.
Исходный дизайн wget определяет разницу в уровне детализации между сообщениями, а не простое разделение между ошибками, а не сообщениями об ошибках.
Существует открытая ошибка об этом http://savannah.gnu.org/bugs/?33839 , а также некоторые старые обсуждения. Вот предложенный патч http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html и здесь есть ответ от Hrvoje Niksic об этом http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .
Помимо этого, есть, конечно, хорошее решение, которое вы предложили в комментарии к менее элегантному решению Фуна.
источник
Вы также можете перенаправить вывод
grep
и отфильтровать сообщение об успехе.Это должно работать:
источник