คุณสามารถใช้เคล็ดลับต่อไปนี้เพื่อแลกเปลี่ยน และ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
นั้น