ฉันกำลังพยายามไพพ์สตรีมที่แอ็คทีฟไปยังคำสั่งอื่น (อาจเป็นสคริปต์ทุบตี) แต่ก็ต้องการรอให้สตรีมทั้งหมดเสร็จสิ้นก่อนที่จะประมวลผลคำสั่ง s.g. ฉันสามารถทำสิ่งนี้:
tail file.log | grep keyword | xargs -L 1 echo ...
และมันจะแสดงผลแถวที่ตรงกันจาก file.log อย่างถูกต้องนำหน้าด้วย "... " เห็นได้ชัดว่าฉันไม่ต้องการเพียงแค่ก้องนั่นเป็นเพียงตัวอย่างที่ง่ายขึ้น ตอนนี้เมื่อฉันลองทำสิ่งนี้:
tail -f file.log | grep keyword
งานนี้ในที่เป็นผลลัพธ์แถวที่ตรงกันแล้วหยุดชั่วคราวจนกว่า file.log เปลี่ยนแปลงแล้วมันจะออกบรรทัดใหม่ที่ตรงกัน อย่างไรก็ตามถ้าฉันลองทำสิ่งนี้:
tail -f file.log | grep keyword | xargs -L 1 echo ...
มันไม่มีอะไรส่งออก - ฉันคิดว่ามันกำลังรอกระแสที่เปิดโดย tail -f เพื่อสิ้นสุด ฉันได้ลองแล้วเช่นกัน:
tail -f file.log | grep keyword | while read line; do echo...$line; end
โดยไม่มีการเปลี่ยนแปลงพฤติกรรม ฉันได้อ่านคำถามอื่น ๆ ที่นี่ว่าควรจะทำงาน ฉันใช้ Ubuntu 14.04 มีความแตกต่างบ้างไหม? ฉันจะทำให้เรื่องนี้ทำงานได้อย่างไร