linux - serve - ¿Por qué salir del código 141 con grep-q?
salir de php artisan serve (2)
Esto se debe a que grep -q
sale inmediatamente con un estado cero tan pronto como se encuentre una coincidencia. El comando zfs
todavía está escribiendo en la tubería, pero no hay ningún lector (porque grep
ha salido), por lo que se le envía una señal SIGPIPE
desde el kernel y sale con un estado de 141
.
Otro lugar común donde se ve este comportamiento es con la head
. p.ej
$ seq 1 10000 | head -1
1
$ echo ${PIPESTATUS[@]}
141 0
En este caso, el head
leyó la primera línea y terminó, lo que generó una señal SIGPIPE
y se seq
secuencia con 141
.
Consulte " La señal SIGPIPE infame " de la Guía del programador de Linux.
¿Alguien puede explicar por qué obtengo el código de salida 141 de lo siguiente?
#!/usr/bin/bash
set -o pipefail
zfs list | grep tank
echo a ${PIPESTATUS[@]}
zfs list | grep -q tank
echo b ${PIPESTATUS[@]}
cat /etc/passwd | grep -q root
echo c ${PIPESTATUS[@]}
yo obtengo
...
a 0 0
b 141 0
c 0 0
A mi entender, el código de salida 141 es un fracaso, pero la línea anterior da cero, por lo que debería ser un éxito, diría yo.
No estoy familiarizado con la zfs list
, pero creo que se queja de que su salida estándar se haya cerrado: grep -q
sale inmediatamente cuando se encuentra una coincidencia, a diferencia de grep
.