La raison est que le tuyau est fermé par grep lorsqu'il a encore des données à lire à partir de cat . Le signal SIGPIPE est attrapé par le chat et il sort.
Ce qui se passe généralement dans un pipeline, c'est que le shell exécute cat en un seul processus et grep en autre. La sortie standard de cat est connecté à la fin d'écriture du tube et du stdin de grep jusqu'à la fin de la lecture. Ce qui s'est passé était grep a frappé une recherche de modèle qui n'existait pas et a quitté immédiatement provoquant la fermeture de l'extrémité de lecture du tube, ce qui cat n'aime pas car il a plus de données à écrire dans le tube. Étant donné que les actions d'écriture se produisent sur une autre extrémité qui a été fermée, SIGPIPE est attrapé par le cat sur lequel il sort immédiatement.
Pour un cas aussi trivial, vous pouvez supprimer complètement l'utilisation du pipeline et l'exécuter en tant que grep "pattern" file.txt lorsque le contenu du fichier est rendu disponible sur le stdin de grep sur lequel il pourrait lire.