Я очікував cat <(cat)і cat | catзробити те саме: копіювати рядки зі stdin у stdout. Моє розуміння полягало в тому, що обидва будуть виконувати a catв нижній оболонці, перенаправляти catstdout нижньої catоболонки на тимчасово названу трубу, а потім виконувати іншу в поточній оболонці, а її stdin буде перенаправлений на трубу.
Натомість cat <(cat)дозволяє мені вводити мій термінал, але жоден із вхідних рядків не копіюється та ^Dне дає сигналу EOF; cat | catпрацює, як очікувалося.
У подальшому експерименті я перевірив, чи cat =(cat)немає подібних труднощів cat <(cat), але це працює, як я і очікував: все stdin аж до ^Dкопіювання копіюється в stdout за один раз.
Хтось може допомогти мені зрозуміти, що zsh робить під кришкою?