ถ้าผมเข้าใจอย่างถูกต้องคุณกำลังมองหาเทียบเท่า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สำหรับวิธีการทำงาน ไปป์ที่มีชื่อนั้นสะดวกกว่าการทดแทนกระบวนการเนื่องจากคุณต้องสร้างและลบทิ้งและเริ่มและซิงโครไนซ์กระบวนการด้วยตนเอง พวกมันมีข้อได้เปรียบในการพกพาได้อย่างเต็มที่ในขณะที่เชลล์ไม่สนับสนุนการทดแทนกระบวนการทั้งหมด สามารถใช้ในสถานการณ์อื่นนอกเหนือจากการทดแทนกระบวนการด้วย
ภายใต้ประทุนในบางระบบการทดแทนกระบวนการใช้ไพพ์ที่มีชื่ออยู่ภายใน ในระบบส่วนใหญ่ แต่ก็อาศัยอยู่กับชื่อไฟล์ที่เป็นตัวแทนอธิบายไฟล์