Důvodem je, že potrubí je uzavřeno grep
když má ještě nějaká data ke čtení z cat
. Signál SIGPIPE
je chycen kočkou a odejde.
Co se obvykle děje v potrubí je, že shell běží cat
v jednom procesu a grep
v jiném. Standardní hodnota cat
je připojen k zapisovacímu konci roury a stdin grep
do konce čtení. Stalo se grep
zasáhlo hledání vzoru, které neexistovalo a okamžitě skončilo, což způsobilo uzavření čteného konce potrubí, což cat
nelíbí, protože má nějaká další data k zápisu do roury. Protože se akce zápisu odehrávají na jiném konci, který byl uzavřen, SIGPIPE
je zachycen kódem cat
na kterém okamžitě vystoupí.
V takovém triviálním případě můžete použití kanálu zcela odstranit a spustit jej jako grep "pattern" file.txt
když je obsah souboru zpřístupněn přes stdin grep
ze kterého by to mohlo číst.