Il motivo è perché la pipe è chiusa da grep quando ha ancora dei dati da leggere da cat . Il segnale SIGPIPE viene catturato dal gatto ed esce.
 Ciò che di solito accade in una pipeline è che la shell esegue cat in un processo e grep in un altro. Lo stdout di cat è connesso all'estremità di scrittura della pipe e allo stdin di grep alla fine della lettura. Quello che è successo è stato grep ha colpito una ricerca di pattern che non esisteva ed è uscito immediatamente causando la chiusura dell'estremità di lettura del pipe, che cat non gli piace poiché ha alcuni dati in più da scrivere nella pipe. Poiché le azioni di scrittura si verificano su un altro che è stato chiuso dall'altra parte, SIGPIPE viene catturato dal cat su cui esce immediatamente.
 Per un caso così banale, potresti rimuovere del tutto l'utilizzo della pipeline ed eseguirlo come grep "pattern" file.txt quando i contenuti del file sono resi disponibili sullo stdin di grep da cui potrebbe leggere.