私は同じことcat <(cat)
をcat | cat
することを期待しました:stdinからstdoutに行をコピーします。私の理解では、両方がcat
サブシェルでa を実行し、サブシェルcat
のstdoutを一時的な名前付きパイプにcat
リダイレクトしてから、stdinをパイプにリダイレクトして現在のシェルで別のシェルを実行します。
代わりに、cat <(cat)
端末で入力できますが、入力行はコピー^D
されず、シグナルを送信できませんEOF
。cat | cat
期待どおりに動作します。
さらなる実験として、にcat =(cat)
似た問題があるかどうかを確認cat <(cat)
しました^D
が、期待どおりに動作します。aまでのすべてのstdin が一度にstdoutにコピーされます。
誰もzshがボンネットの下で何をしているのかを理解するのを助けることができますか?