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?

pupeno
fuente

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"
pupeno
fuente
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
reconbot
fuente
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 ...

Kyle Brandt
fuente
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"
Ben S
fuente
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:".

Pausado hasta nuevo aviso.
fuente
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.

Hontvári Levente
fuente