ถ้าฉันต้องการแสดง "aaa" บนหน้าจอ:
(1)$: echo aaa | cat ... works OK
(2)$: echo aaa | ( cat ) ... works OK
(3)$: echo aaa | ( cat & ) ... NOT working
(4)$: ( echo aaa & ) | cat ... works OK
(5)$: echo aaa | ( cat <&0 & ) ... works ok in BASH (but not in SH)
(6)$: echo aaa | ( cat <&3 & ) 3<&0 ... works ok in BASH and SH
การรวมจาก (3) และ (4) -> กระบวนการที่แยกออกยังคงมีเอาต์พุตเชื่อมต่อที่สามารถควบคุมใช้เปลี่ยนเส้นทาง ... แต่ไม่ใช่อินพุต!
คำถามของฉันคือ: มีคนเข้าใจว่าทำไมและวิธีการทำงานของบรรทัด (5) ???
... "<& 0" ย่อมาจาก "0 <& 0" สาเหตุที่การเปลี่ยนเส้นทาง 0 ถึง 0 เป็นวิธีแก้ปัญหาและสิ่งที่เกิดขึ้นจริงด้วยการป้อนข้อมูลของกระบวนการเดี่ยว Subshell ไม่ใช่ปัญหาโดยใช้เครื่องหมายปีกกา {... } แทน (... ) ให้ผลลัพธ์เหมือนกัน
... และคำถาม 2: มีวิธีแก้ปัญหาที่ดีกว่าสำหรับ "การให้อินพุตกับกระบวนการที่แยกออก" กว่าบรรทัด (6)