Chcę wyprowadzić zawartość pliku, gdy się zmieniają, na przykład jeśli mam plik foobar
i robię:
magic_command foobar
Bieżący terminal powinien wyświetlać zawartość pliku i czekać, aż, nie wiem, nacisnę ^ C.
Następnie, jeśli z innego terminala:
echo asdf >> foobar
Pierwszy terminal powinien wyświetlać nowo dodaną linię oprócz oryginalnej zawartości pliku (oczywiście biorąc pod uwagę, że nie nacisnąłem ^ C).
Oznaczę to jako pracę domową, ponieważ chcę odkrywać i uczyć się Linuksa, ale to nie jest praca domowa, to tylko moja ciekawość.
Odpowiedzi:
Możesz używać
tail command
z-f
:To dobre rozwiązanie do pokazów w czasie rzeczywistym.
źródło
-F
(wielkich liter f), które ponownie otworzą plik, jeśli zostanie on usunięty i ponownie utworzony po drodze.Jeśli chcesz pokazać krótki plik, który mieści się na jednym ekranie terminala, a zmieniający się jest prawdopodobnie cały plik, możesz użyć
watch
:watch cat example.txt
Domyślnie pokazuje cały plik co 2 sekundy, w tym opcjonalny nagłówek:
Opcja
-d
(--differences
) podświetli zmiany od poprzedniej wersji danych wyjściowych lub od pierwszej wersji.źródło
Kiedy muszę wykryć zmiany w plikach i zrobić coś innego niż to
tail -f filename
, co robiłem, użyłeminotifywait
skryptu do wykrycia zmiany i działania na jej podstawie. Przykład zastosowania pokazano poniżej. Zobaczman inotifywait
inne nazwy zdarzeń i przełączniki. Może być konieczne zainstalowanieinotify-tools
pakietu, na przykład przezsudo apt-get install inotify-tools
.Oto przykładowy skrypt o nazwie
exec-on-change
:W dwóch konsolach wprowadziłem następujące polecenia (gdzie A> oznacza wpis w konsoli A, a B> oznacza wpis w konsoli B.)
W
cat t
konsoli A pojawiły się następujące dane wyjściowe :Następujące dane wyjściowe
exec-on-change
pojawiły się w konsoli B:exec-on-change
Skrypt zakończony kiedyrm
„Dt
.źródło
less
ma tryb śledzenia podobny dotail -f
- wystarczy nacisnąć,F
gdy jest otwarty.źródło
Mam trzy rozwiązania:
1)
tail -f
to dobry pomysł2) musimy również
tailf
skorzystać3) trzeci to skrypt bashowy:
źródło