คำสั่ง tar ปกติ
tar cvf foo.tar ./foo >foo.out 2>foo.err
มีสามสตรีม IO เอาต์พุต
- เก็บข้อมูลไปยัง foo.tar
- รายการชื่อไฟล์ไปยัง STDOUT (เปลี่ยนเส้นทางไปยัง foo.out)
- ข้อความแสดงข้อผิดพลาดไปยัง STDERR (เปลี่ยนเส้นทางไปยัง foo.err)
ฉันสามารถตรวจสอบ foo.err เพื่อหาข้อความแสดงข้อผิดพลาดโดยไม่ต้องอ่านรายชื่อไฟล์
ถ้าฉันต้องการทำอะไรกับข้อมูลที่เก็บถาวร (ไพพ์ผ่าน netcat หรือโปรแกรมบีบอัดแบบพิเศษ) ฉันสามารถใช้-f -
ตัวเลือกของ tar
tar cvf - ./foo 2>foo.err | squish > foo.tar.S
แต่ตอนนี้รายชื่อไฟล์ของฉันถูกผสมกับข้อความแสดงข้อผิดพลาดของฉันเพราะ-v
เอาท์พุทของ tar ไม่สามารถไปที่ STDOUT (นั่นคือที่ที่เก็บข้อมูลไหล) ดังนั้น tar เขียนอย่างชาญฉลาดถึง STDERR แทน
การใช้ Korn เชลล์มีวิธีสร้างคำสั่งที่ไพพ์สตรีมไฟล์เก็บถาวรไปยังคำสั่งอื่น แต่ยังคงดักจับ-v
เอาต์พุตแยกจากข้อความแสดงข้อผิดพลาดใด ๆ
tee
หรือไม่ ดูเหมือนว่ากรณีการใช้งานที่ถูกต้องสำหรับมัน