Der Grund ist, dass die Pipe durch grep geschlossen wird wenn noch einige Daten aus cat gelesen werden müssen . Das Signal SIGPIPE wird von einer Katze gefangen und verlässt sie.
Was normalerweise in einer Pipeline passiert, ist, dass die Shell cat ausführt in einem Vorgang und grep in einem anderen. Die Standardausgabe von cat ist mit dem schreibenden Ende der Pipe und stdin von grep verbunden zum Leseende. Was passiert ist, war grep traf eine Mustersuche, die nicht existierte, und wurde sofort beendet, was dazu führte, dass das gelesene Ende der Pipe geschlossen wurde, was cat ist mag nicht, da noch einige Daten in die Pipe geschrieben werden müssen. Da die Schreibaktionen an einem anderen Ende stattfinden, das geschlossen wurde, SIGPIPE wird von cat abgefangen auf dem es sofort beendet wird.
In solch einem trivialen Fall könnten Sie die Pipeline-Nutzung vollständig entfernen und sie als grep "pattern" file.txt ausführen wenn der Inhalt der Datei über die stdin von grep verfügbar gemacht wird auf dem es lesen konnte.