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.