ถ้าผมเข้าใจอย่างถูกต้องคุณกำลังมองหาเทียบเท่าtee file1 file2 file3แต่แทนที่จะเขียนข้อมูลเดียวกันถึงสามไฟล์file1, file2และfile3คุณต้องการให้ท่อข้อมูลเดียวกันในคำสั่งสามcmd1, cmd2และcmd3เช่น
… | ??? cmd1 cmd2 cmd3
ควรจะเทียบเท่า
… | cmd1 &
… | cmd2 &
… | cmd3 &
ยกเว้นว่า…จะถูกดำเนินการเพียงครั้งเดียว
มีสองวิธีในการทำเช่นนั้น
Ksh93, ทุบตีและ zsh สนับสนุนกระบวนการทดแทน นี่เป็นลักษณะทั่วไปของไพพ์ที่อนุญาตให้อาร์กิวเมนต์ของคำสั่งเป็นไฟล์ที่เมื่อเขียนไปจะส่งผ่านข้อมูลเป็นอินพุตไปยังคำสั่ง (นอกจากนี้ยังมีตัวแปรอินพุตซึ่งเมื่ออ่านจากจะได้รับเอาต์พุตข้อมูลโดยคำสั่ง) . นั่นคือ,
echo hello | tee >(cmd1)
พิมพ์helloไปยังเอาต์พุตมาตรฐานและนอกจากนั้นจะทำงานcmd1ด้วยhelloอินพุต
ตัวอย่างเช่นหากคุณต้องการทำซ้ำอินพุตsomecommandและส่งไปยังทั้งสองcmd1และcmd2คุณสามารถใช้
somecommand | tee >(cmd1) | cmd2
หากเชลล์ของคุณไม่รองรับการทดแทนกระบวนการคุณสามารถใช้ pipes ที่มีชื่อแทน ดูคำตอบของ Arcegeสำหรับวิธีการทำงาน ไปป์ที่มีชื่อนั้นสะดวกกว่าการทดแทนกระบวนการเนื่องจากคุณต้องสร้างและลบทิ้งและเริ่มและซิงโครไนซ์กระบวนการด้วยตนเอง พวกมันมีข้อได้เปรียบในการพกพาได้อย่างเต็มที่ในขณะที่เชลล์ไม่สนับสนุนการทดแทนกระบวนการทั้งหมด สามารถใช้ในสถานการณ์อื่นนอกเหนือจากการทดแทนกระบวนการด้วย
ภายใต้ประทุนในบางระบบการทดแทนกระบวนการใช้ไพพ์ที่มีชื่ออยู่ภายใน ในระบบส่วนใหญ่ แต่ก็อาศัยอยู่กับชื่อไฟล์ที่เป็นตัวแทนอธิบายไฟล์