สิ่งนี้นำเฉพาะเอาต์พุตมาตรฐานไปยัง nul เนื่องจากข้อผิดพลาดมาตรฐานซ้ำกับเอาต์พุตมาตรฐานก่อนที่เอาต์พุตมาตรฐานจะถูกเปลี่ยนทิศทางไปยัง dirlist
โปรดทราบว่าลำดับการเปลี่ยนเส้นทางมีความสำคัญ ตัวอย่างเช่นคำสั่ง
ls > dirlist 2>&1
นำทั้งเอาต์พุตมาตรฐาน (file descriptor 1) และข้อผิดพลาดมาตรฐาน (file descriptor 2) ไปยังไฟล์ dirlist ขณะที่คำสั่ง
ls 2>&1 > dirlist
นำเฉพาะเอาต์พุตมาตรฐานไปยังไฟล์ dirlist เนื่องจากข้อผิดพลาดมาตรฐานถูกทำสำเนาของเอาต์พุตมาตรฐานก่อนที่จะเปลี่ยนทิศทางเอาต์พุตมาตรฐานไปยัง dirlist
ลำดับของการเปลี่ยนเส้นทางคือ "> ไฟล์ 2> & 1" เทียบกับ "2> & 1> ไฟล์"
แม้ว่าจะไม่สำคัญว่าการเปลี่ยนเส้นทางจะปรากฏที่ใดในบรรทัดคำสั่ง มีการตั้งค่าจากซ้ายไปขวา
2>&1 >file
ข้อผิดพลาดทั่วไปคือทำไฟล์คำสั่ง 2> & 1> เพื่อเปลี่ยนเส้นทางทั้ง stderr และ stdout ไปยังไฟล์ เรามาดูกันว่าเกิดอะไรขึ้น ก่อนอื่นเราพิมพ์คำสั่งในเทอร์มินัลทั่วไปของเราตัวอธิบายมีลักษณะดังนี้:
--- +-----------------------+
standard input ( 0 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard output ( 1 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard error ( 2 ) ---->| /dev/pts/5 |
--- +-----------------------+
จากนั้นเชลล์ของเรา Bash จะเห็น 2> & 1 ดังนั้นจึงทำซ้ำ 1 และตัวอธิบายไฟล์มีลักษณะดังนี้:
--- +-----------------------+
standard input ( 0 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard output ( 1 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard error ( 2 ) ---->| /dev/pts/5 |
--- +-----------------------+
ถูกต้องไม่มีอะไรเปลี่ยนแปลง 2 แล้วชี้ไปที่สถานที่เดียวกับ 1 ตอนนี้ Bash เห็น> ไฟล์แล้วจึงเปลี่ยน stdout:
--- +-----------------------+
standard input ( 0 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard output ( 1 ) ---->| file |
--- +-----------------------+
--- +-----------------------+
standard error ( 2 ) ---->| /dev/pts/5 |
--- +-----------------------+
และนั่นไม่ใช่สิ่งที่เราต้องการ
>file 2>&1
ทีนี้ลองดูคำสั่งที่ถูกต้อง> ไฟล์ 2> & 1 เราเริ่มจากตัวอย่างก่อนหน้านี้และไฟล์ Bash see>:
--- +-----------------------+
standard input ( 0 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard output ( 1 ) ---->| file |
--- +-----------------------+
--- +-----------------------+
standard error ( 2 ) ---->| /dev/pts/5 |
--- +-----------------------+
จากนั้นก็เห็นการซ้ำซ้อนของเรา 2> & 1:
--- +-----------------------+
standard input ( 0 ) ---->| /dev/pts/5 |
--- +-----------------------+
--- +-----------------------+
standard output ( 1 ) ---->| file |
--- +-----------------------+
--- +-----------------------+
standard error ( 2 ) ---->| file |
--- +-----------------------+
และ voila ทั้ง 1 และ 2 จะถูกเปลี่ยนเส้นทางไปยังไฟล์
n>&m
เป็นเปลี่ยนเส้นทางสตรีมn
ไปยังที่ที่m
ปัจจุบันเป็นผู้กำกับ ไม่เปลี่ยนเส้นทางกระแสการสตรีมn
m