El motivo es que la tubería está cerrada por grep
cuando todavía tiene algunos datos para leer desde cat
. La señal SIGPIPE
es atrapado por el gato y sale.
Lo que suele suceder en una canalización es que el shell ejecuta cat
en un proceso y grep
en otro. La salida estándar de cat
está conectado al extremo de escritura de la canalización y la entrada estándar de grep
hasta el final de la lectura. Lo que pasó fue grep
golpeó una búsqueda de patrón que no existía y salió de inmediato, lo que provocó que se cerrara el extremo de lectura de la canalización, lo que cat
no le gusta ya que tiene algunos datos más para escribir en la canalización. Dado que las acciones de escritura le suceden a otro extremo que ha sido cerrado, SIGPIPE
es atrapado por el cat
en el que sale inmediatamente.
Para un caso tan trivial, podría eliminar el uso de canalización por completo y ejecutarlo como grep "pattern" file.txt
cuando el contenido del archivo está disponible a través de la entrada estándar de grep
en el que podría leer.