wget para imprimir errores, pero nada más


27

¿Cómo puedo tener errores de impresión wget, pero nada más?

En el comportamiento predeterminado, muestra una barra de progreso y muchas cosas.

En la versión --no-verbose todavía se imprime una línea por archivo descargado, esto no quiero.

La opción --quiet hace que sea totalmente silencioso, incluso en el caso de un error, no imprime nada.

¿Hay algún modo en el que imprima errores, pero nada más?

Respuestas:


17

Hay muy buenas respuestas en esta pregunta, asegúrese de revisarlas, pero lo que he hecho es esto:

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

Esta fue la única respuesta que funcionó para mí con 16.04 ubuntu bash.
— Ligemer

17

Use curl, no tiene sentido adivinar cómo se verá cada error.

[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 / - silencioso

Silent mode. Don’t show progress meter or error messages. Makes Curl mute.

-S / - show-error

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

Y si necesita stderr en stdout por alguna razón.

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

1
Desafortunadamente, esto no maneja los errores HTTP típicos (por ejemplo, los errores 404 se suprimen de esta manera), mientras que el método hacky wget sí.
— process91

Voto negativo: aunque su sugerencia es plausible, no responde la pregunta.
— Stephan Richter

Agregar -f / - no puede mostrar un mensaje de error si el servidor devuelve un código de error (por ejemplo, 404)
— Hontvári Levente

Esta podría ser una gran respuesta si, la pregunta era sobre curl, o si curl tenía paridad característica con wget. Lamentablemente tampoco es el caso ..
— DFC

4

No veo una opción para eso. ¿Necesita saber cuál es el error, o simplemente si sucedió? Si solo necesita saber si hubo un error, puede usar el estado de salida.

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

O tal vez:

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

Y puedes cambiar el gato a un comando grep si quieres ponerte elegante ...


3
Forma más simple: wget -o logfile <url> || cat logfile
— kolypto

La forma más simple es peor, ya que probablemente desee salir o hacer algo diferente en caso de error, además de mostrar el mensaje de error.
— Sam Watkins

2

Redirija la salida estándar a /dev/null, pero mantenga la salida de error en su elección de shell.

En bash esto sería:

wget [wget options] > /dev/null

Editar: Así se wgetporta mal. Si todos los errores contienen la palabra "error" en ellos, puede canalizar agrep

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

wget parece enviar todo a stderr.
— pupeno 02 de

Agregué otra opción usando grepsolo para generar errores
— Ben S

stderrno atraviesa la tubería sin ayuda.
— Pausado hasta nuevo aviso.

1
Al final utilicé wget [opciones de wget] 2> & 1 | grep -i "error \ | error"
— pupeno 02 de

1

Dado que wgetgenera todos los mensajes stderr, debe usar la redirección antes de poder canalizarla a grep:

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

Esto supone que wgetcomienza sus líneas de error con "wget:".


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

trabajos. Pero siempre trunca el archivo de salida, que puede querer o no.

Curl es mejor:

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

En caso de error, no modifica el archivo de salida.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.