เปิดไฟล์ข้อความในเทอร์มินัลและรีเฟรชอัตโนมัติเมื่อใดก็ตามที่มีการเปลี่ยนแปลง


15

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

ฉันได้มองที่vimมี:set autoreadแต่ต้องใช้การป้อนข้อมูลประถมบางอย่าง (เช่นภายในปุ่มกดvim) ที่จะเรียกการฟื้นฟู

ฉันต้องการให้รีเฟรชอัตโนมัติเป็นแบบแฮนด์ฟรี มีแฮ็คที่จะทำเช่นนี้?

ฉันใช้ Crunchbang 11 แต่ฉันรู้สึกสบายใจกับเครื่องเทอร์มินัล


มันดีสำหรับอะไร ไฟล์นี้เกี่ยวกับอะไร? tail -f $fileถ้าเป็นบันทึกก็มักจะมีสายใหม่เพิ่มที่ด้านล่างแล้วคุณก็สามารถใช้
jirib

โดยเฉพาะฉันกำลังเขียนสคริปต์ Python ที่เขียนไฟล์ข้อความอื่นไม่เพียงเพิ่มบรรทัดใหม่ที่ด้านล่าง ฉันต้องการตรวจสอบไฟล์ข้อความนั้น
Kit

inotify ....... ?
jirib

inotifyฉันไม่คุ้นเคยกับ มองหามันเป็น API ที่ฉันต้องเข้าถึงด้วยการเขียนโปรแกรม C ซึ่งฉันไม่อยากจะทำเร็ว ๆ นี้ ฉันกำลังมองหาโซลูชันคำสั่งเชลล์
Kit

1
inotify-toolsมีชุดของเครื่องมือที่คุณสามารถใช้จากบรรทัดคำสั่งเรียกโดยทั่วไปคือ สิ่งเหล่านี้ใช้คุณสมบัติที่อยู่ภายในเคอร์เนลที่เรียกว่า inotify เมื่อใดก็ตามที่ไฟล์ถูกดำเนินการเมื่อมีเหตุการณ์ถูกส่งผ่าน inotify ที่คุณสามารถดำเนินการได้ หลายโปรแกรม Langs เช่น Python, Perl ฯลฯ มีไลบรารีที่ล้อม Inotify API ดู Wikipedia pg: en.wikipedia.org/wiki/Inotify
slm

คำตอบ:


27

สิ่งนี้จะแสดงให้คุณเห็นไฟล์หนึ่งครั้งต่อวินาที:

watch -n 1 cat file

1
นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ! ฉันขยายมันเพิ่มเติมด้วยwatch -tpcn 1 pygmentize -g filename
Kit

@Kit ระมัดระวังกับwatch -gมันไม่ได้ทำงานตามที่คุณคาดว่าจะได้
terdon

@terdon ที่สวิทช์เป็นจริงสำหรับ-g pygmentizeอย่างไรก็ตามขอขอบคุณสำหรับคำเตือน
Kit

หากเนื้อหาไฟล์มีมากกว่าหนึ่งหน้าการใช้สิ่งนี้คุณจะไม่สามารถเลื่อนหน้าจอเพื่อตรวจสอบเนื้อหาส่วนที่เหลือของไฟล์
CodyChan

1
ทำไมไม่เพียงwatch -n 1 tail file?
Varun

8
tail -f /var/log/syslog

แสดงการอัพเดต syslog เมื่อถูกเพิ่มลงในไฟล์


สิ่งนี้แสดงให้เห็นว่ามีการเพิ่มบรรทัดที่ถูกต้องหรือไม่ OP ต้องการการรีเฟรชแบบเต็ม
Sean256

ทำงานบน windows ด้วย git-bash เช่นกัน
David

3

ฉันจะใช้watchเป็นคำตอบอื่น ๆ ที่แนะนำ แต่เพียงเพื่อแสดงให้คุณเห็นว่าใครสามารถเข้าถึงปัญหาที่ซับซ้อนดูเหมือนโดยใช้หน่วยการสร้างที่จัดทำโดยเชลล์เช่น Unix; a while loop สามารถเป็นวิธีที่ง่ายในการวนลูปของคุณ

$ while [ 1 ]; do clear; date; cat <afile>; sleep 1 ;done

ตัวอย่าง

$ while [ 1 ]; do clear; date; cat sample.txt; sleep 1 ;done
Fri Nov 15 09:17:39 EST 2013
1
2
3
4
5

หน้าจอจะถูกล้างและหลังจากนั้นหนึ่งวินาทีสิ่งนี้จะปรากฏขึ้น:

Fri Nov 15 09:17:40 EST 2013
1
2
3
4
5

2

ตามที่แนะนำในความคิดเห็นคุณสามารถใช้งานได้inotifyแม้ว่าจะเป็นงานมากเกินไป watchโดยไกลที่ง่ายที่สุดคือการใช้งาน นี่คือวิธีหนึ่งในการดำเนินการกับinotify:

  1. ติดตั้งinotify-toolsแพ็คเกจ

    sudo apt-get install inotify-tools
    
  2. ใช้inotifywatchเพื่อตรวจสอบการเปลี่ยนแปลงไฟล์ของคุณ เรียกใช้ในลูปและcatไฟล์หากตรวจพบการเปลี่ยนแปลง (นั่นเป็นเหตุผลที่ฉันgrepสำหรับสตริงtotal):

    while true; do 
      inotifywatch -e modify -t 1 kk 2>/dev/null | grep -q total && 
      echo "$(date;cat kk)"; 
    done
    

ผ่าน-q(หรือ--quiet) เพื่อgrepปิดเสียงสายที่จับคู่ด้วย "ทั้งหมด"
FichteFoll

@FichteFoll เป็นจุดที่ดี (โปรดละเว้นความคิดเห็นก่อนหน้าของฉันถ้าคุณเห็นมันก่อนที่ฉันจะลบฉันก็ช้า) ขอขอบคุณแก้ไข
terdon

0

watch(1)เป็นเครื่องมือที่มีประโยชน์จริงๆ [1]

ฉันจะไม่แนะนำให้ใช้catแม้ว่า

ให้ใช้headหรือดูtailว่าคุณต้องการเห็นจุดเริ่มต้นหรือจุดสิ้นสุดไฟล์แทนหรือไม่

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