คุณสามารถใช้เคล็ดลับต่อไปนี้เพื่อแลกเปลี่ยน และstdout stderrจากนั้นคุณก็ใช้ฟังก์ชันท่อปกติ
( proc1 3>&1 1>&2- 2>&3- ) | proc2
ให้stdoutและstderrทั้งสองชี้ไปที่จุดเริ่มต้นสิ่งนี้จะให้สิ่งที่คุณต้องการ
สิ่งที่x>yบิตทำคือเปลี่ยนที่จับไฟล์xดังนั้นตอนนี้จึงส่งข้อมูลไปยังจุดที่จัดการไฟล์yในปัจจุบัน สำหรับกรณีเฉพาะของเรา:
3>&1สร้างหมายเลขอ้างอิงใหม่3ซึ่งจะส่งออกไปยังหมายเลขอ้างอิงปัจจุบัน1 (stdout เดิม) เพียงเพื่อบันทึกไว้ที่ใดที่หนึ่งสำหรับสัญลักษณ์แสดงหัวข้อย่อยสุดท้ายด้านล่าง
1>&2แก้ไขหมายเลขอ้างอิง1(stdout) เพื่อส่งออกไปยังหมายเลขอ้างอิงปัจจุบัน2 (stderr เดิม)
2>&3-แก้ไขหมายเลขอ้างอิง2(stderr) เพื่อส่งออกไปยังหมายเลขอ้างอิงปัจจุบัน3 (stdout เดิม) จากนั้นปิดที่จับ3(ผ่านทาง-ด้านท้าย)
เป็นคำสั่ง swap ที่คุณเห็นในอัลกอริทึมการเรียงลำดับอย่างมีประสิทธิภาพ:
temp = value1;
value1 = value2;
value2 = temp;
rcซึ่งเป็นเชลล์อื่น เช่น:proc1 |[2] proc2. ไม่ดีเหรอ? ไม่ได้อยู่ในbashนั้น