Wenn Sie sagen, yes | head
die Schale Dinge ordnen, so dass der Ausgang des yes
zu einem pipe geht und die Eingabe von head
kommt aus dem gleichen Rohr. Wenn head
10 Zeilen liest, schließt es sein STDIN_FILENO und schließt dadurch sein Ende der Pipe. Wenn yes
versucht, in eine geschlossene Pipe zu schreiben, wird eine SIGPIPE
erhalten, deren Standardaktion es ist, sie zu beenden.
Ein einfacher Weg, dies zu testen ist mit strace
:
$ strace yes | head
y
[...]
y
write(1, "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\n"..., 4096) = -1 EPIPE (Broken pipe)
--- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=4069, si_uid=1000} ---
+++ killed by SIGPIPE +++
möglich Duplikat [Bash Rohr Handhabung] (http://stackoverflow.com/questions/19122/bash-pipe-handling) – devnull
Siehe auch [this] (http://stackoverflow.com/questions/10031344/why-is-this-pipe-terminiert). – devnull
Wenn Sie es wirklich brauchen, um zu hängen, verwenden Sie 'yes | Schwanz ". :-) –