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.