xargs y zcat: errores de silencio

xargs y zcat: errores de silencio

Supongamos que tengo:

** EDIT TO HAVE CLOSER CORRESPONDENCE TO ACTUAL USAGE **

find ... -regex ... | head -n 1 | xargs -I {} zcat {} | head -n 1
# next, I do some other things

ahora todo funciona correctamente. Sin embargo, el xargs -I {} zcat {}comando produce el siguiente error:

xargs: zcat: terminated by signal 13

Lo cual es algo que puedo ignorar a los efectos de lo que estoy tratando de hacer. Sin embargo, si ejecuto el código y lo canalizo a less, la xargs: zcat: terminated by signal 13declaración es la primera línea. Esto no es deseable. ¿Hay alguna manera de suprimir o detectar esta advertencia/error que no es un error?

Respuesta1

El error se debe a que se le envió zcatuna señal. PIPEEsto sucede porque la segunda vez zcatque se ejecuta (y todas las demás veces posteriores, una vez para cada archivo excepto la primera), intenta escribir a través de la tubería headdespués de headhaber salido (debido a que ha terminado con su tarea de generar la primera línea). .

Podrías evitar generar este error en particular leyendo todos los datos que zcatproduce. Puedes hacer esto ya sea

ls files/* | xargs -I {} zcat {} | { head -n 1; cat >/dev/null; }

o

ls files/* | xargs -I {} zcat {} | sed -n 1p

o

ls files/* | xargs -I {} zcat {} | awk 'NR == 1'

o verLa respuesta de Eduardo Trapanipara saber cómo simplementeignorarel error.

Otra forma de hacer esto es descomprimir sólo el primer archivo:

set -- files/*
zcat "$1" | head -n 1

Esto no activa la PIPEseñal porque zcatsolo se ejecuta una vez y no para cada archivo del directorio. Esto tendría el beneficio adicional de poder manejar cualquier nombre de archivo válido (por ejemplo, nombres con nuevas líneas incrustadas).

Respuesta2

Aunque vea el mensaje como la primera línea, no se escribe en la salida estándar, sino en el error estándar.

Entonces, esto debería funcionar:

ls files/* | xargs -I {} zcat {} 2>/dev/null | head -n 1

Descarta la salida de error estándar (la envía a /dev/null)

información relacionada