GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué salir del código 141 con grep -q?

Esto se debe a que grep -q sale inmediatamente con un estado cero tan pronto como se encuentra una coincidencia. El zfs el comando todavía está escribiendo en la canalización, pero no hay lector (porque grep ha salido), por lo que se envía un SIGPIPE señal del kernel y sale con un estado de 141 .

Otro lugar común donde ve este comportamiento es con head . por ejemplo

$ seq 1 10000 | head -1
1

$ echo ${PIPESTATUS[@]}
141 0

En este caso, head leyó la primera línea y terminó, lo que generó un SIGPIPE señal y seq salió con 141 .

Consulte "La infame señal SIGPIPE" de la Guía del programador de Linux.


Otra opción sería no usar una canalización, sino usar una sustitución de proceso:

grep -q tanque <(lista zfs)

Actualización:supongo que es lo mismo, ya que el proceso que se ejecuta entre paréntesis también recibirá sigpipe.


No estoy familiarizado con zfs list , pero supongo que se queja de que su salida estándar está cerrada - grep -q sale inmediatamente cuando se encuentra una coincidencia, a diferencia de grep .


Linux
  1. Códigos de salida de la línea de comandos de Bash desmitificados

  2. Listado de todas las direcciones de correo electrónico en un archivo con grep

  3. ¿Por qué Rsync falla con tubería rota (32), error en el zócalo Io (código 10) en Io.c (820)?

  4. Bash Prompt con el último código de salida

  5. La aplicación C++ termina con el código de salida 143. ¿Qué significa?

Manipulación de texto en la línea de comando con grep

¿Por qué puedo iniciar sesión con contraseñas parciales?

Comando Grep en Linux (con ejemplos)

10 ejemplos prácticos de expresiones regulares con grep

Cómo grep con salida de color

Cómo grep salida ps con encabezados