Ich erwartete cat <(cat)
und sollte cat | cat
dasselbe tun: Zeilen von stdin nach stdout kopieren. Mein Verständnis war, dass beide a cat
in einer Subshell ausführen , die cat
stdout der Subshell auf eine temporäre Named Pipe umleiten und dann eine andere cat
in der aktuellen Shell ausführen, deren stdin auf die Pipe umgeleitet wird.
cat <(cat)
Lassen Sie mich stattdessen an meinem Terminal tippen, aber keine der Eingabezeilen wird kopiert und es wird ^D
kein Signal EOF
ausgegeben. cat | cat
funktioniert aber wie erwartet.
Als weiteres Experiment habe ich geprüft, ob cat =(cat)
ähnliche Schwierigkeiten wie cat <(cat)
vorliegen, aber es funktioniert wie erwartet: Bis zu einem ^D
wird alles auf einmal auf stdout kopiert.
Kann mir jemand helfen zu verstehen, was zsh unter der Haube tut?
quelle
<(cmd)
) an umleitet/dev/null
, sodass das Verhaltenzsh -c 'cat <(cat)'
anders ist ( sofort zurückgegeben und nichts ausgegeben).