ฉันคาดหวังcat <(cat)และcat | catทำสิ่งเดียวกัน: คัดลอกบรรทัดจาก stdin ไปยัง stdout ความเข้าใจของฉันคือการที่ทั้งสองจะดำเนินการcatใน subshell การเปลี่ยนเส้นทาง subshell cat's stdout เพื่อไปป์ที่มีชื่อชั่วคราวและจากนั้นดำเนินการอื่นcatในเปลือกปัจจุบันกับ stdin มันเปลี่ยนเส้นทางไปยังท่อ
แต่cat <(cat)ช่วยให้ฉันพิมพ์ที่ terminal ของฉัน แต่ไม่มีเส้นที่นำเข้าได้รับการคัดลอกและ^Dล้มเหลวในการส่งสัญญาณEOF; cat | catทำงานได้ตามที่คาดหวัง
จากการทดสอบเพิ่มเติมฉันได้ตรวจสอบว่าcat =(cat)มีปัญหาคล้ายกันcat <(cat)แต่ใช้งานได้ตามที่คาดไว้: stdin ทั้งหมดไปจนถึงการ^Dคัดลอกไปยัง stdout ในครั้งเดียว
ใครสามารถช่วยฉันเข้าใจสิ่งที่ zsh กำลังทำอยู่ภายใต้ประทุน?