$ program [arguments...] 2>&1 | tee outfile
2>&1
ดัมพ์ stderr และ stdout stream
tee outfile
ใช้สตรีมที่ได้รับและเขียนไปยังหน้าจอและไปที่ไฟล์ "outfile"
นี่อาจเป็นสิ่งที่คนส่วนใหญ่มองหา สถานการณ์ที่เป็นไปได้คือบางโปรแกรมหรือสคริปต์ทำงานอย่างหนักเป็นเวลานานและสร้างผลลัพธ์จำนวนมาก ผู้ใช้ต้องการตรวจสอบความคืบหน้าเป็นระยะ แต่ยังต้องการผลลัพธ์ที่เขียนไปยังไฟล์
ปัญหา (โดยเฉพาะอย่างยิ่งเมื่อผสม stdout และ stderr สตรีม) คือมีความเชื่อมั่นในกระแสข้อมูลที่ถูกล้างโดยโปรแกรม ตัวอย่างเช่นถ้าการเขียนไปยัง stdout ทั้งหมดไม่ได้ถูกลบทิ้ง แต่การเขียนไปยัง stderr ทั้งหมดจะถูกลบทิ้งจากนั้นพวกเขาก็จะเรียงลำดับตามลำดับเวลาในไฟล์เอาต์พุตและบนหน้าจอ
มันก็ไม่ดีเช่นกันหากโปรแกรมส่งสัญญาณออก 1 หรือ 2 บรรทัดทุกสองสามนาทีเพื่อรายงานความคืบหน้า ในกรณีเช่นนี้หากโปรแกรมไม่ได้ถูกลบทิ้งโดยผู้ใช้ผู้ใช้จะไม่เห็นผลลัพธ์ใด ๆ บนหน้าจอเป็นเวลาหลายชั่วโมงเพราะไม่มีสิ่งใดถูกผลักเข้าไปในท่อเป็นเวลาหลายชั่วโมง
อัปเดต: โปรแกรมunbuffer
ซึ่งเป็นส่วนหนึ่งของexpect
แพ็คเกจจะแก้ปัญหาบัฟเฟอร์ ซึ่งจะทำให้เกิด stdout และ stderr tee
การเขียนไปยังหน้าจอและไฟล์ได้ทันทีและเก็บไว้ในซิงค์เมื่อมีการรวมกันและเปลี่ยนเส้นทางไปยัง เช่น:
$ unbuffer program [arguments...] 2>&1 | tee outfile