Tôi đã mong đợi cat <(cat)
và cat | cat
làm điều tương tự: sao chép các dòng từ stdin sang stdout. Sự hiểu biết của tôi là cả hai sẽ thực hiện một cat
lớp con, chuyển hướng cat
thiết bị đầu cuối của lớp con sang một ống có tên tạm thời, và sau đó thực hiện một cái khác cat
trong lớp vỏ hiện tại với stdin được chuyển hướng đến đường ống.
Thay vào đó, cat <(cat)
cho phép tôi gõ tại thiết bị đầu cuối của mình, nhưng không có dòng đầu vào nào bị sao chép và ^D
không báo hiệu EOF
; cat | cat
hoạt động như mong đợi mặc dù.
Như một thử nghiệm tiếp theo, tôi đã kiểm tra xem cat =(cat)
có gặp khó khăn tương tự không cat <(cat)
, nhưng nó hoạt động như tôi mong đợi: tất cả các stdin cho đến khi ^D
được sao chép vào thiết bị xuất chuẩn trong một lần.
Bất cứ ai có thể giúp tôi hiểu những gì zsh đang làm dưới mui xe?