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
.