คำตอบสั้น ๆ
GNU Parallelมีชุดตัวเลือกที่ดีซึ่งทำให้ง่ายต่อการทำสิ่งต่าง ๆ เช่น:
parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log
ผลลัพธ์จะเป็น:
one.log: เนื้อหาของ one.log ที่นี่ ...
one.log: เนื้อหาของ one.log ที่นี่ ...
two.log: เนื้อหาของ two.log ที่นี่ ...
two.log: เนื้อหาของ two.log ที่นี่ ...
คำอธิบายเพิ่มเติม
- ตัวเลือกใน
--tagstring=str
แท็กสายการส่งออกแต่ละคนมีสตริงSTR จากparallel
หน้าคน :
- แท็กสตริง
ติดแท็กบรรทัดด้วยสตริง แต่ละบรรทัดเอาต์พุตจะถูกเติมไว้ด้วย
STR และ TAB (\ t) str สามารถมีสตริงการแทนที่เช่น {}
- แท็กสตริงถูกละเว้นเมื่อใช้ -u, --onall และ --nonall
สิ่งที่เกิดขึ้นทั้งหมด{}
จะถูกแทนที่ด้วยข้อโต้แย้งของขนานซึ่งในกรณีนี้คือชื่อไฟล์บันทึก ie one.log
และtwo.log
(อาร์กิวเมนต์ทั้งหมดหลังจาก:::
)
--line-buffer
จำเป็นต้องมีตัวเลือกเนื่องจากเอาต์พุตของคำสั่ง (เช่นtail -f one.log
หรือtail -f two.log
) จะถูกพิมพ์หากคำสั่งนั้นเสร็จสิ้น เนื่องจากtail -f
จะรอการเติบโตของไฟล์จึงจำเป็นต้องพิมพ์เอาต์พุตตามบรรทัดที่--line-buffer
ทำเช่นนั้น อีกครั้งจากparallel
หน้าคน :
- line-buffer (การทดสอบอัลฟา)
บัฟเฟอร์เอาต์พุตตามบรรทัด - กลุ่มจะเก็บเอาท์พุท
ด้วยกันสำหรับงานทั้งหมด - กลุ่มช่วยให้การส่งออกไปมิกซ์กับ
ครึ่งบรรทัดมาจากงานหนึ่งและครึ่งบรรทัดมาจาก
งานอื่น - line-buffer พอดีระหว่างสอง: GNU ขนาน
จะพิมพ์เต็มบรรทัด แต่จะอนุญาตให้ผสมกับ
งานที่แตกต่าง
-v
ตัวเลือก (verbose) สำหรับหาง สิ่งนี้อาจไม่ตรงกับคำถามของคุณ แต่เป็นการเริ่มต้น