ใน shells execทำ 1) เปิดไฟล์และเปลี่ยนเส้นทาง 2) execing จริง(แทนที่อิมเมจกระบวนการปัจจุบันด้วยอิมเมจกระบวนการอื่น)
สิ่งเหล่านี้execเป็นการเปลี่ยนเส้นทาง
ก่อนอื่นคุณเปลี่ยนเส้นทาง ( exec 1> >(tee $LOGFILE)) stdoutdescriptor (1) ไปยังไพพ์ที่สร้างการทดแทนกระบวนการเชื่อมต่อกับteeกระบวนการที่รันพร้อมกันซึ่ง$LOGFILEเป็นอาร์กิวเมนต์แรกแล้วคุณเปลี่ยนเส้นทางstderrdescriptor (2) ไปยังตำแหน่งเดียวกับที่ descriptor 1ชี้ไปที่ (ที) ท่อ).
โปรดทราบว่าผู้ที่ได้รับมรดกได้รับมรดกคุณได้สร้างอนาคตทั้งหมดstdoutและstderrส่งออกไปยังteeกระบวนการซึ่งจะเขียนลงไป$LOGFILEในทุกที่ที่ผู้ยื่น 1 ชี้ไปที่เดิม (อาจเป็นเทอร์มินัลของคุณ)
หมายเหตุ:
กระบวนการ tee ส่งออกไปยัง stdout ดั้งเดิม (= ไฟล์ต้นฉบับที่ 1) เนื่องจากในขณะที่คุณสามารถเรียนรู้จาก / ค้นหาbash (1)สำหรับการขยายคำสั่งอย่างง่ายและการทดแทนกระบวนการการทดแทนกระบวนการ ( >() <()) เกิดขึ้น (พร้อมกับการขยายอื่น ๆ ) ก่อน การเปลี่ยนเส้นทางได้รับการดำเนินการซึ่งหมายความว่าการเปลี่ยนเส้นทางที่exec 1> >(tee "$LOGFILE")เกิดขึ้นหลังจากที่ teeได้เริ่มต้นออกจากที่teeมี filescriptor 1 เดียวกันที่มันได้รับมรดกจากเปลือกแม่ (หากเป็นวิธีอื่น ๆteeจะถูกเขียนลงในอินพุตของตนเองซึ่งอาจทำให้เกิดการหยุดชะงักขึ้นอยู่กับรูปแบบ IO ของมัน)