คำตอบสั้น ๆ
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) สำหรับหาง สิ่งนี้อาจไม่ตรงกับคำถามของคุณ แต่เป็นการเริ่มต้น