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