Öffnen Sie eine Textdatei in einem Terminal und aktualisieren Sie sie automatisch, wenn sie geändert wird


14

Wie öffne ich eine Textdatei in einem Terminal mit sofortiger automatischer Aktualisierung bei jeder Änderung?

Ich habe betrachtet vimmit :set autoread, aber es erfordert einige elementare Eingabe (wie ein Tastendruck innen vim) die Refresh auszulösen.

Ich möchte, dass die automatische Aktualisierung freihändig ist. Gibt es einen Hack, um das zu tun?

Ich benutze Crunchbang 11, aber ich bin ziemlich zufrieden mit dem Terminal.


Wofür ist das gut? Worum geht es in dieser Datei? Wenn es sich um ein Protokoll handelt, werden normalerweise neue Zeilen am unteren Rand hinzugefügt, die Sie einfach verwenden können tail -f $file.
Jirib

Insbesondere schreibe ich ein Python-Skript, das eine andere Textdatei schreibt und nicht nur unten neue Zeilen hinzufügt. Ich möchte diese Textdatei überwachen.
Kit

inotifizieren .......?
Jirib

Ich bin nicht vertraut mit inotify. Nachschlagen, es ist eine API, auf die ich mit C-Programmierung zugreifen muss, was ich nicht so schnell tun möchte. Ich suche nach einer Shell-Befehlslösung.
Kit

1
Es gibt eine Reihe von Tools, die Sie über die Befehlszeile verwenden können inotify-tools. Diese verwenden eine im Kernel integrierte Funktion namens inotify. Jedes Mal, wenn eine Datei auf ein Ereignis reagiert, wird über inotify gesendet, auf das Sie reagieren können. Viele prog. langs. B. Python, Perl usw. haben Bibliotheken, die die Inotify-API umschließen. Siehe die Wikipedia-Seite: en.wikipedia.org/wiki/Inotify
slm

Antworten:


25

Dies sollte Ihnen die Datei einmal pro Sekunde anzeigen:

watch -n 1 cat file

1
Das ist was ich suche. Vielen Dank! Ich erweiterte es weiter mitwatch -tpcn 1 pygmentize -g filename
Kit

@ Kit vorsichtig mit watch -g, es funktioniert nicht wie erwartet .
Terdon

@terdon, der -gSchalter ist eigentlich für pygmentize. Trotzdem danke für die Warnung.
Kit

Wenn sich der Dateiinhalt auf einer Seite befindet, können Sie auf diese Weise nicht durch den Bildschirm scrollen, um den Rest des Dateiinhalts zu überprüfen.
CodyChan

1
Warum nicht einfach watch -n 1 tail file?
Varun

6
tail -f /var/log/syslog

Zeigt die Syslog-Updates an, wenn sie der Datei hinzugefügt werden.


Dies zeigt Linien, wenn sie richtig hinzugefügt werden? OP muss vollständig aktualisiert werden.
Sean256

3

Ich würde verwenden, watchwie die andere Antwort nahelegt, aber nur um Ihnen zu zeigen, wie man ein scheinbar kompliziertes Problem mit den Bausteinen einer Shell wie Unix angehen kann. Eine while-Schleife kann eine einfache Möglichkeit sein, eine Schleife durchzuführen.

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

Beispiel

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

Der Bildschirm wird gelöscht und nach einer Sekunde wird Folgendes angezeigt:

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

2

Wie in den Kommentaren vorgeschlagen, können Sie es auch verwenden, inotifyobwohl es übertrieben ist. Bei weitem am einfachsten zu bedienen watch. Hier ist eine Möglichkeit, dies zu tun inotify:

  1. Installieren Sie das inotify-toolsPaket

    sudo apt-get install inotify-tools
    
  2. Verwenden inotifywatchSie diese Option , um Ihre Datei auf Änderungen zu überprüfen. Führen Sie es in einer Schleife und catder Datei aus, wenn eine Änderung festgestellt wird (deshalb habe ich grepfür die Zeichenfolge total):

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

Wenn Sie -q(oder --quiet) an übergeben, grepwird die übereinstimmende Zeile mit "total" stummgeschaltet.
FichteFoll

@FichteFoll guter Punkt (bitte ignoriere meinen vorherigen Kommentar, wenn du ihn gesehen hast, bevor ich ihn gelöscht habe, ich war langsam). Danke, bearbeitet.
Terdon

0

watch(1)ist ein wirklich nützliches Werkzeug. [1]

Ich würde es jedoch nicht empfehlen cat.

Verwenden Sie stattdessen headoder, tailob Sie den Anfang oder das Ende der Datei sehen möchten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.