มีวิธีการรีเฟรชคำสั่งน้อยลงแบบไดนามิกหรือไม่?


141

ผมชอบwatchคำสั่ง แต่ก็มีข้อ จำกัด ของมัน

ฉันอยากรู้ว่าฉันสามารถเลียนแบบการทำงานของwatchด้วยlessหรือไม่ ฉันกำลังมองหาความสามารถในการเลื่อนดูไดเรกทอรีของฉันเป็นหลักเนื่องจากจะได้รับการแก้ไขแบบไดนามิกผ่านสคริปต์ที่ทำงานอยู่


ฉันกำลังมองหาtail -f foo.log | grep barและสามารถเปลี่ยนคำสั่ง grep แบบไดนามิกได้ด้วยการรีสตาร์ทท่อท้าย / grep
Alexander Mills

คำตอบ:


119

ในlessคุณสามารถพิมพ์Fเพื่ออ่านต่อท้ายไฟล์ (เช่นtail -f); คุณสามารถพิมพ์:eและชื่อไฟล์เพื่อดูไฟล์อื่นได้ แต่น่าเสียดายถ้าคุณป้อนชื่อไฟล์ปัจจุบันlessอย่าโหลดไฟล์ซ้ำ อย่างไรก็ตามมีเคล็ดลับเพื่อให้อ่านไฟล์ปัจจุบันอีกครั้งแนะนำโดยsabgenton : พิมพ์:eและป้อนชื่อของไฟล์ที่ไม่มีอยู่ ; ที่ทำให้แสดงข้อความแสดงข้อผิดพลาดน้อยกว่าจากนั้นโหลดไฟล์ปัจจุบันอีกครั้ง

หากคุณกำลังมองหาทางเลือกให้กับwatch lsที่นี่มีไม่กี่:

  • ตัวจัดการไฟล์สมัยใหม่ (เช่น Nautilus, Thunar, Konqueror, Dolphin, Finder) รีเฟรชมุมมองแบบเรียลไทม์
  • Emacs ไม่มีการรีเฟรชตามเวลาจริง แต่auto-revert-modeจะรีโหลดไฟล์หรือไดเรกทอรีทุก 5 วินาที (ความล่าช้าสามารถกำหนดค่าได้)
  • แม้ว่า w3m จะเป็นเว็บเบราว์เซอร์เป็นหลัก แต่ก็สามารถสร้างไดเรกทอรีที่สามารถผ่านได้และโปรแกรมดูไฟล์ข้อความ กดRเพื่อโหลด URL (ท้องถิ่น) อีกครั้ง

6
สำหรับฉัน: e randomnamejkdlfjldf e ไม่สามารถโหลดชื่อไฟล์ที่ไม่มีอยู่แล้วโหลด
ซ้ำ

1
@ Sabgenton ขอบคุณฉันไม่รู้เหมือนกัน นั่นเป็นเคล็ดลับที่ยอดเยี่ยม ฉันเพิ่มไปยังคำตอบของฉัน แต่คุณสามารถโพสต์เป็นคำตอบของคุณเอง (ซึ่งฉันหวังว่า Zaid จะยอมรับ)
Gilles

1
@CMCDragonkai ไม่less +Fเพียงดูเนื้อหาต่อท้าย ใช้:e nonexistentfileเพื่ออ่านอินพุตที่เปลี่ยนแปลงอย่างสมบูรณ์อีกครั้ง
Gilles

1
มีแฟล็กบรรทัดคำสั่งสำหรับสิ่งนั้นหรือไม่?
CMCDragonkai

3
@PaulWagland Rไม่ไม่สามารถรีเฟรชไฟล์ได้อย่างน่าเชื่อถือ มันรีเฟรชหน้าจอและเช็ดบัฟเฟอร์อินพุตบางส่วน แต่จริงๆแล้วมันไม่ได้โหลดข้อมูลจากไฟล์ในทุกสถานการณ์ (เฉพาะในกรณีที่ไฟล์มีขนาดใหญ่ฉันไม่ได้เจาะลึกเข้าไปในโค้ด)
Gilles

65

Shift+Fจะทำให้คล้ายกับless tailfกล่าวคือจะได้รับการรีเฟรชหากมีข้อมูลเพิ่มเติมต่อท้ายไฟล์


7
โปรดทราบว่านี่ใช้งานได้เฉพาะสำหรับการต่อท้าย หากมีการลบหรือแก้ไขเส้นในสถานที่lessจะไม่แสดงการเปลี่ยนแปลงเหล่านั้น
Nathaniel M. Beaver

ฉันจะหยุดโหมดต่อไปนี้และเข้าสู่โหมดเลื่อนได้อีกครั้งได้อย่างไร
Tom Hale

1
<kbd> Ctrl + C </kbd>
balki

1
balki $COMMAND | lessประสบการณ์ของฉันอยู่ที่นี้ฆ่าคำสั่งท่อข้อมูลหากคุณกำลังใช้ ฉันสงสัยว่ามีวิธีที่ดีรอบนี้? คุณสามารถทำสิ่งต่าง ๆ เช่น$COMMAND > /tmp/file & less /tmp/fileแต่ไม่ดีมาก
Att Righ

@AttRigh ฉันไม่เคยฆ่าคำสั่งของฉัน ( แต่ฉันอ่านบันทึกของการทำงานคำสั่งวิธีนี้ผมไม่ได้เข้าไปในท่อน้อยในทางเทคนิค)
Jena

41

เพียงพิมพ์:

less +F filename

นี่เป็นการเลียนแบบการกด "F" ภายในเครื่องมือแก้ไข


1
ขอบคุณ; เพิ่มนามแฝงของฉันalias check="less +F" .bashrc
ลุคเดวิส

22

manหน้าสามารถให้ข้อมูลได้มาก อย่ากลัวพวกเขา ในบรรดาทุกอย่างอื่นman lessบอกว่าคุณสามารถใช้Rคำสั่งต่อไปนี้:

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.

(ฉันรู้ว่าคำถามนี้มีอายุมากกว่า 6 ปี แต่เกิดขึ้นจากการค้นหาของ Google ดังนั้นฉันจึงไม่ใช่คนเดียวที่คลิกลิงก์เพื่อมาที่นี่)


7
repaints นี้หน้าจอในกรณีที่มันถูกขัดจังหวะโดยเอาท์พุทจากโปรแกรมอื่น ไม่โหลดไฟล์ซ้ำอย่างสม่ำเสมอ ฉันไม่ได้ขุดลึกเข้าไปในรหัสเพื่อดูว่ามันทำอะไรไฟล์สั้นทดลองไม่ได้รับการโหลดใหม่ ฉันไม่ได้ถูกข่มขู่โดยหน้าคนและฉันบอกว่าคำอธิบายนี้เป็นคำที่ไม่ดี:“ ทาสี” ไม่ได้บอกว่าข้อมูลนั้นถูกอ่านซ้ำและพฤติกรรมที่เกิดขึ้นจริงไม่พอดี“ มีประโยชน์หากไฟล์กำลังเปลี่ยนแปลง” (อาจเป็น ข้อผิดพลาดผมไม่ทราบเพราะผมไม่ทราบว่าคำสั่งควรจะทำ) .. ?
กิลส์

ฉันไม่มีความเชี่ยวชาญและไม่ได้อ่านซอร์สโค้ดน้อยเช่นกัน แต่สิ่งที่ลืมไปแล้วคือสิ่งที่รู้แล้วเกี่ยวกับไฟล์ & โหลดซ้ำรีเฟรชเอาต์พุตตามอินพุตที่รีโหลด คำถามอ่านว่า "มีวิธีการรีเฟรชคำสั่งน้อยแบบไดนามิกหรือไม่" หากฉันได้อ่านคำอธิบายของคำถามให้ละเอียดยิ่งขึ้นก่อนที่จะตอบกลับฉันอาจไม่ได้รับคำตอบเนื่องจากพวกเขาต้องการพูดว่า "เพื่อเลื่อนดูไดเรกทอรีของฉันเนื่องจากมีการแก้ไขแบบไดนามิกผ่านสคริปต์ที่ทำงานอยู่" น้อยกว่าจะไม่เป็นคำสั่งที่เหมาะสมสำหรับการที่
destenson

ทำงานได้ดีสำหรับฉันแม้ว่าจะใช้ไฟล์ยาว 3 ไบต์ ฉันไม่สามารถจินตนาการได้ว่าทำไมมันจะไม่ทำงานกับไฟล์ขนาดใหญ่
Addison

1
ที่ดี! สำหรับฉันมันใช้ได้ทั้งไฟล์สั้นและยาว ฉันเพิ่งสังเกตเห็นปัญหาที่เป็นไปได้สองประการ: 1. lessไม่ได้เปิดไฟล์อีกครั้งโดยใช้ชื่อไฟล์ - เช่นเมื่อไอโหนดเปลี่ยนไฟล์ (เช่นในการเขียนทับไฟล์โดยใช้mv) จากนั้นเนื้อหาไฟล์เก่ายังคงอยู่ (อาจเป็นไอโหนดเก่า - 2. บรรทัดแรกที่แสดงอาจเริ่มที่ออฟเซ็ตไบต์เดียวกันในเนื้อหาไฟล์ต้นฉบับ ดังนั้นเมื่อความยาวของบรรทัดเปลี่ยนไปบรรทัดแรกที่แสดงอาจไม่สมบูรณ์และบรรทัดที่แสดงอาจเลื่อนขึ้น / ลง
pabouk

Rไม่ได้ผลเสมอไป ดูunix.stackexchange.com/questions/4351/…
wisbucky

5

ปุ่ม "F" เมื่อทำงานlessจะทำ "ติดตาม" คล้ายกับtail -fแต่ฉันไม่แน่ใจว่าจะบรรลุสิ่งที่คุณกำลังมองหาที่นี่หรือไม่


5

ปกติแล้วฉันแค่พิมพ์Gเพื่อปรับเอาท์พุทแบบครั้งเดียว ฉันพบว่ามีประโยชน์มากกว่าระบบไฟล์เครือข่ายเช่น CIFS


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

1
ขอบคุณ ครั้งแรกมันไม่รีเฟรชสำหรับฉัน แต่ตอนนี้ดูเหมือนว่าทำงานได้อย่างถูกต้อง ในผู้ชายมันไม่ได้เขียนว่าจะรีเฟรชไฟล์ man less: 'G หรือ> หรือ ESC-> ไปที่บรรทัด N ในไฟล์โดยตั้งค่าเริ่มต้นที่ส่วนท้ายของไฟล์' ฉันลบความคิดเห็นที่ผิดเก่าของฉันที่นี่ขอโทษสำหรับพวกเขา
Yaroslav Nikitenko

1
BTW สิ่งที่คุณเรียกว่า 'พื้นฐานเพียงครั้งเดียว'? ผู้ดูแลระบบของlessMark Nudelman ตอบกลับข้อความต่อไปนี้: "คำสั่ง G โดยปกติจะไม่บังคับให้อ่านไฟล์ซ้ำเหมือนคำสั่ง R อาจดูเหมือนว่าถ้าปลายไฟล์ยังไม่ถูกอ่านเมื่อ G ถูกเรียกใช้ดังนั้นการกระโดดไปที่จุดสิ้นสุดของไฟล์จะต้องอ่านข้อมูลที่นั่นเป็นครั้งแรกตัวอย่างเช่นหากคุณข้ามไปยังจุดสิ้นสุดด้วย G จากนั้นข้ามกลับไปที่จุดเริ่มต้นด้วย 1G จากนั้นโปรแกรมอื่นจะแก้ไขข้อมูลที่ จุดสิ้นสุดของไฟล์ (โดยไม่เปลี่ยนความยาว), "(ต่อ)
Yaroslav Nikitenko

(ต่อ) "จากนั้นคุณข้ามไปยังจุดสิ้นสุดอีกครั้งด้วย G คุณจะไม่เห็นข้อมูลที่แก้ไข แต่ถ้าคุณไม่ข้ามไปยังจุดสิ้นสุดและกลับไปที่จุดเริ่มต้นจากนั้นครั้งแรกที่คุณดำเนินการคำสั่ง G จะต้องอ่าน ข้อมูลที่นั่นเป็นครั้งแรกและแน่นอนว่ามันจะเห็นการดัดแปลงใด ๆ ที่เกิดขึ้นตั้งแต่มีการเรียกใช้น้อยครั้งแรก "
Yaroslav Nikitenko

ในกรณีนี้ฉันพูดถึงว่าเป็นการรีเฟรชครั้งเดียวซึ่งตรงข้ามกับการรีเฟรชแบบไดนามิกซึ่งเป็นส่วนหนึ่งของคำถามเดิมที่ถาม
jorb

1

คุณสามารถใช้เสียงเรียกเข้าเพื่ออ่านไฟล์จากนั้นเพิ่มการแมปต่อไปนี้ลงใน.vimrcไฟล์ของคุณและคุณสามารถโหลดไฟล์ได้อย่างง่ายดายด้วย,r:

let mapleader = ","
nnoremap <leader>r :edit <CR>

หมายเหตุหากคุณแก้ไขไฟล์แล้วเสียงเรียกเข้าจะบ่น เพียงแค่เปลี่ยนเป็น

let mapleader = ","
nnoremap <leader>r :edit! <CR>

เพื่อเพิกเฉยต่อการเปลี่ยนแปลง


พวกเขาจะต้องงัดvimจากมือที่เย็นและตายของคุณ บริบทของคำถามนั้นเกี่ยวกับlessแต่ในฐานะที่เป็นคนที่มีแนวโน้มเดียวกับตัวเองฉันก็เห็นอกเห็นใจ!
Benjamin R

1

Rสำหรับการทาสีใหม่จะไม่โหลดไฟล์ซ้ำ [1]

วิธีหลีกเลี่ยงปัญหาที่จะโหลดไฟล์hqซ้ำอีกครั้งคือกดซึ่งจะเปิดหน้าวิธีใช้จากนั้นออกจาก มันมีผลข้างเคียงของการบังคับให้โหลดไฟล์ซ้ำ


[1] ต่อไปนี้เป็นตัวอย่างบางส่วนของสถานการณ์ที่Rต้องทำและไม่โหลดซ้ำ:

  • >และ>>การเปลี่ยนแปลง: รับการโหลดซ้ำ
  • sed -i, gEdit, TextEdit: อย่าโหลดซ้ำ
  • บน Linux viการเปลี่ยนแปลง: โหลดใหม่
  • สำหรับ Mac viการเปลี่ยนแปลง: อย่าโหลดซ้ำ

ฉันเชื่อว่าความแตกต่างนั้นเกิดขึ้นกับการเปลี่ยนแปลง inode (คุณสามารถตรวจสอบได้ls -i foo.txt) หากไอโหนดเปลี่ยนไปRจะไม่ทำงาน


0

คุณสามารถไปป์มันtail -fแทนมันจะส่งผลให้คุณตามเอาท์พุท คุณจะสูญเสียความสามารถในการย้าย (เลื่อน) ผ่านเอาต์พุตของคุณ


0

หากคุณไม่รังเกียจที่จะใช้เบราว์เซอร์คุณสามารถเปิดเว็บเซิร์ฟเวอร์Algernonด้วยคำสั่งนี้:

algernon -a -t /directory/name

รายการของไฟล์จะถูกแสดงและรีเฟรชอัตโนมัติที่http: // localhost: 3000 /


ผิดไหม? ..
โทมัส

ดูเหมือนว่าจะเป็นวิธีในการดูสารบบแม้ว่ามันจะอยู่ไกลจากless
Jeff Schaller

0

ฉันเพิ่งพบกระทู้นี้เหมือนคนอื่น ฉันต้องการเพิ่มวิธีแก้ปัญหาเมื่อคุณอยู่ท้ายไฟล์แล้วการใช้ 'g' ตามด้วย 'G' จะบังคับให้รีเฟรชไฟล์

ฉันลงเอยด้วยการสร้างปุ่มมาโครสำหรับสิ่งนี้ในโปรแกรมเทอร์มินัลของฉัน (SecureCRT) มาโครคือ 'gG'

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