Saya mengharapkan cat <(cat)
dan cat | cat
melakukan hal yang sama: menyalin baris dari stdin ke stdout. Pemahaman saya adalah bahwa keduanya akan mengeksekusi cat
dalam subshell, mengarahkan cat
stdout subshell ke pipa bernama sementara, dan kemudian menjalankan yang lain cat
di shell saat ini dengan stdin diarahkan ke pipa.
Sebagai gantinya, cat <(cat)
izinkan saya mengetik di terminal saya, tetapi tidak ada jalur input yang disalin dan ^D
gagal memberi sinyal EOF
; cat | cat
bekerja seperti yang diharapkan.
Sebagai percobaan lebih lanjut, saya memeriksa apakah cat =(cat)
memiliki kesulitan yang sama cat <(cat)
, tetapi berfungsi seperti yang saya harapkan: semua stdin hingga dapat ^D
disalin ke stdout dalam sekali jalan.
Adakah yang bisa membantu saya memahami apa yang dilakukan zsh di bawah tenda?
sumber
<(cmd)
)/dev/null
, sehingga perilakunya berbeda (zsh -c 'cat <(cat)'
segera kembali dan tidak menghasilkan apa-apa).