Otwórz plik tekstowy w terminalu i automatycznie odświeżaj go po każdej zmianie

15

Jak otworzyć plik tekstowy w terminalu z natychmiastowym automatycznym odświeżaniem przy każdej zmianie?

Sprawdziliśmy vimz :set autoread, ale to wymaga pewnej elementarnej wejściowych (takich jak naciśnięcie klawisza wewnątrz vim), aby wywołać odświeżania.

Chcę, aby automatyczne odświeżanie było wolne od rąk. Czy jest jakiś hack, aby to zrobić?

Korzystam z Crunchbang 11, ale nie mam nic przeciwko terminalowi.

Zestaw
źródło
Do czego to jest dobre? O czym jest ten plik? Jeśli jest to dziennik, zwykle ma na dole nowe linie, możesz po prostu użyć tail -f $file.
jirib
W szczególności piszę skrypt w języku Python, który zapisuje inny plik tekstowy, a nie tylko dodaje nowe wiersze na dole. Chciałbym monitorować ten plik tekstowy.
Kit
inotify .......?
jirib
Nie jestem zaznajomiony z inotify. Patrząc w górę, jest to interfejs API, do którego muszę uzyskać dostęp za pomocą programowania w języku C, do czego nie jestem skłonny w najbliższym czasie. Szukam rozwiązania polecenia powłoki.
Zestaw
1
Istnieje zestaw narzędzi, których można użyć z wiersza poleceń, zwanych zwykle inotify-tools. Używają one wbudowanej w jądro funkcji o nazwie inotify. Za każdym razem, gdy plik jest reagowany na zdarzenie, jest wysyłany za pośrednictwem wiadomości, na którą można działać. Wiele prog. język. takie jak Python, Perl itp. mają biblioteki, które zawierają interfejs API Inotify. Zobacz Wikipedia str: en.wikipedia.org/wiki/Inotify
slm

Odpowiedzi:

27

Powinno to wyświetlać plik raz na sekundę:

watch -n 1 cat file
Cristian Măgherușan-Stanciu
źródło
1
Właśnie tego szukam. Dzięki! Rozszerzyłem go jeszcze bardziejwatch -tpcn 1 pygmentize -g filename
Kit
@Kit ostrożnie watch -g, nie działa tak, jak można się spodziewać .
terdon
@terdon, -gprzełącznik jest rzeczywiście dla pygmentize. W każdym razie dzięki za ostrzeżenie.
Zestaw
Jeśli zawartość pliku znajduje się na jednej stronie, używając tej strony nie można przewinąć ekranu, aby sprawdzić resztę zawartości pliku.
CodyChan
1
Dlaczego nie tylko watch -n 1 tail file?
Varun
8
tail -f /var/log/syslog

Pokazuje aktualizacje syslog, gdy są dodawane do pliku.

Joe C.
źródło
To pokazuje wiersze, gdy są dodawane poprawnie? OP wymaga pełnego odświeżenia.
Sean256,
działa również w systemie Windows z git-bash
David
3

Użyłbym, watchjak sugeruje inna odpowiedź, ale tylko po to, aby pokazać, w jaki sposób można podejść do pozornie skomplikowanego problemu przy użyciu bloków konstrukcyjnych udostępnianych przez powłokę, taką jak Unix; pętla while może być prostym sposobem na wykonanie pętli.

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

Przykład

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

Ekran zostanie wyczyszczony, a po chwili zostanie wyświetlony:

Fri Nov 15 09:17:40 EST 2013
1
2
3
4
5
slm
źródło
2

Jak zasugerowano w komentarzach, możesz również użyć tej opcji, inotifyale jest to przesada. Zdecydowanie najprostszy jest w użyciu watch. Oto jeden ze sposobów, aby to zrobić inotify:

  1. Zainstaluj inotify-toolspakiet

    sudo apt-get install inotify-tools
    
  2. Służy inotifywatchdo sprawdzania pliku pod kątem zmian. Uruchom go w pętli i catpliku, jeśli zostanie wykryta zmiana (dlatego I grepdla ciągu total):

    while true; do 
      inotifywatch -e modify -t 1 kk 2>/dev/null | grep -q total && 
      echo "$(date;cat kk)"; 
    done
    
terdon
źródło
Podanie -q(lub --quiet) grepwyciszy dopasowaną linię z „total”.
FichteFoll,
@ FichteFoll dobra uwaga (zignoruj ​​mój poprzedni komentarz, jeśli widziałeś go przed usunięciem, byłem powolny). Dzięki, zredagowane.
terdon
0

watch(1)jest naprawdę przydatnym narzędziem. [1]

Nie polecam catjednak używania .

Zamiast tego użyj headlub tail, aby zobaczyć początek lub koniec pliku.

ScrewTSW
źródło