stop serve salir parar how gnucash español already address linux bash freebsd

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 .