ติดตามท่อโดยใช้น้อยลงหรือไม่


25

สามารถติดตามน้อยลง (โดยกด F) อินพุต piped (คล้ายกับไฟล์) ได้หรือไม่? สำหรับไฟล์ที่กำลังถูกเขียนไปยังคำสั่ง

less <file>

จะติดตามไฟล์เมื่อกด F

แต่ถ้าฉันมีคำสั่งที่ไพพ์เอาต์พุตโดยตรงให้น้อยลงเช่นนี้

command | less

การกด F จะไม่ทำอะไรเลย

ดังนั้นดูเหมือนว่าไม่สามารถติดตามท่อเหมือนไฟล์ได้หรือไม่ หรือบางทีมันอาจจะเกี่ยวข้องกับคำสั่งที่เขียนถึง STDERR ด้วย เอฟเฟกต์ที่ฉันพยายามจะบรรลุนั้นจะเห็นผลลัพธ์ล่าสุดของคำสั่งเช่นเดียวกับที่กด PageDown ค้างไว้!

คำพูดที่เกี่ยวข้องมีไว้สำหรับ G (ไปที่จุดสิ้นสุด): เมื่อการไพพ์โดยตรงไปที่น้อยกว่ามันจะไม่ทำงาน


คำตอบ:


21

กดFหรือGทำให้lessพยายามที่จะเข้าถึง EOF การป้อนข้อมูล ถ้าอินพุตเป็นไพlessพ์แฮงค์จนกว่าจะปิดไพพ์ในอีกด้านหนึ่ง (และไม่ใช่ "ไม่ทำอะไรเลย")

สิ่งนี้สามารถแก้ไขได้โดยการบันทึกเอาต์พุตคำสั่งเป็นไฟล์ชั่วคราวในพื้นหลังจากนั้นใช้เป็นอินพุตสำหรับless:

command > /tmp/x &
less +F /tmp/x; kill %; rm /tmp/x

ไม่มีตัวเลือกให้ทำในนี้lessเท่านั้น อย่างไรก็ตามฉันยอมรับว่ามันจะมีประโยชน์


ถ้าใส่เป็นท่อlessแฮงค์จนท่อปิดให้บริการในด้านอื่นนี่เป็นข้อความที่ทำให้เข้าใจผิด สิ่งที่เกิดขึ้นคือการโทรน้อยreadในโหมดการปิดกั้นรอข้อมูลใหม่หรือหรือปิดท่อ
Piotr Dobrogost

3
หลังจากกด F หรือ G บนอินพุตท่อlessไม่เพียง แต่บล็อกจะอ่าน แต่จะอยู่ในลูปที่รอ EOF และ EOF ในท่อจะเกิดขึ้นเฉพาะเมื่อปิดอีกด้านหนึ่งเท่านั้น
MIK

3
หากlessจะอัปเดตหน้าจอในลูปนั้นจะไม่มีปัญหา การบล็อกการอ่านมีส่วนเกี่ยวข้องกับปัญหานี้เพียงเล็กน้อย
MIK

1
@Flow นี่ไม่ใช่คำถามที่ค้าง แต่เกี่ยวกับการรอซึ่งคาดว่าในสถานการณ์นี้ - รอข้อมูลเพิ่มเติมในไฟล์เมื่อถึง EOF (ซึ่งจะไม่เกิดขึ้นสำหรับไพพ์ปิดโดยวิธี) หรือการขัดจังหวะเพื่อออกจากโหมดติดตาม
mik

1
@PiotrDobrogost พร้อมการบล็อกการอ่านlessจะไม่สามารถอัปเดตหน้าจอได้หากไม่มีข้อมูล เมื่อข้อมูลที่ปรากฏขึ้น, การปิดกั้นการอ่านของคุณจะกลับมาและlessจะสามารถปรับปรุงหน้าจอโดยไม่ต้องมีหัวข้อแยก
MIK

6

สามารถติดตามน้อยลง (โดยกด F) อินพุต piped (คล้ายกับไฟล์) ได้หรือไม่?

ใช่เริ่มต้นด้วยรุ่น 474อย่างไรก็ตามยังไม่ได้กล่าวถึงในบันทึกย่อประจำรุ่นของรุ่นใด ๆ เนื่องจากยังมีปัญหาหนึ่งในคุณสมบัตินี้ ด้านล่างเป็นความคิดเห็นจากผู้ดูแลน้อย - Mark Nudelman:

เกี่ยวกับคำสั่ง F บนไพพ์นี่ยังได้รับการแก้ไขในน้อย -474 แทนที่จะค้นหา EOF คำสั่ง F ค้นหาที่ส่วนท้ายของอินพุตบัฟเฟอร์และเริ่มอ่านที่นั่น อย่างไรก็ตามมันไม่สามารถใช้งานได้จริง ๆ เพราะเมื่อคุณกด CTRL-C เพื่อหยุดคำสั่ง F มันจะฆ่ากระบวนการผลิตผลลัพธ์ ฉันไม่แน่ใจว่าจะแก้ไขได้อย่างไร

จนกว่าปัญหานี้จะได้รับการแก้ไขในน้อยกว่าหนึ่งสามารถแก้ไขได้โดยใช้คุณสมบัติของเปลือก ดูคำตอบของฉันที่จะมีวิธีการออกจากโหมด "น้อย" โดยไม่หยุดกระบวนการอื่น ๆ ในท่อ? คำถามสำหรับรายละเอียด

สำหรับการอ้างอิงปัญหาเกี่ยวกับ F ที่ไม่ทำงานกับไพพ์มีหมายเลขอ้างอิง 300 ในรายการข้อบกพร่องที่รู้จักและมีชื่อคำสั่ง F ไม่ทำงานบนอินพุตแบบไพพ์


คำพูดที่เกี่ยวข้องมีไว้สำหรับ G (ไปที่จุดสิ้นสุด): เมื่อการไพพ์โดยตรงไปที่น้อยกว่ามันจะไม่ทำงาน

มันทำงานได้ตั้งแต่รุ่น 466 การอ้างอิงจากบันทึกประจำรุ่นสำหรับรุ่นนี้

คำสั่งใหม่ ESC-G ไปที่จุดสิ้นสุดของข้อมูลบัฟเฟอร์ในปัจจุบัน


คำสั่ง ESC-G ถูกนำมาใช้ในรุ่น 466 วางจำหน่ายในวันที่ 23 ส.ค. 2557
มิค

@mik ดูเหมือนว่าข้อผิดพลาดในบันทึกย่อประจำรุ่นสำหรับรุ่น 471 นั้น ขอบคุณคง
Piotr Dobrogost

ไม่ใช่ข้อผิดพลาดพวกเขาเพียงแค่แสดงการเปลี่ยนแปลงที่เพิ่มขึ้นนับตั้งแต่รุ่นเสถียรในรุ่น 458 ในกรณีนี้ อย่างไรก็ตามไม่มีการปล่อยที่เสถียรกับคำสั่ง ESC-G
MIK

ขณะนี้คำสั่ง ESC-G อยู่ในรุ่นที่เสถียร (481): "16 ต.ค. 2558 น้อยกว่า -481 ได้เปิดตัวสำหรับการใช้งานทั่วไป"
mik

อัปเดต: เกี่ยวกับคำสั่ง F บนไพพ์นี่ยังได้รับการแก้ไขในน้อย -474 แทนที่จะค้นหา EOF คำสั่ง F ค้นหาที่ส่วนท้ายของอินพุตบัฟเฟอร์และเริ่มอ่านที่นั่น อย่างไรก็ตามมันไม่สามารถใช้งานได้จริง ๆ เพราะเมื่อคุณกด ctrl-C เพื่อหยุดคำสั่ง F มันจะฆ่ากระบวนการผลิตผลลัพธ์ ฉันไม่แน่ใจว่าจะแก้ไขได้อย่างไร - Mark Nudelman ผู้ดูแลน้อย
Piotr Dobrogost

2

จากหน้าคนน้อย

[Keyboard] COMMANDS [...]

   F      Scroll  forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already
          at the end of the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The  behav‐
          ior is similar to the "tail -f" command.)

ดังนั้นจึงควรใช้งานได้และใช้งานได้จริงสำหรับฉัน


1
คำสั่งนี้จะทำงานแตกต่างกันเมื่อใช้กับไพพ์ตามที่อธิบายโดย @mik และไม่ชัดเจนว่า OP ต้องการอะไร
Piotr Dobrogost
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.