Czy istnieje sposób na dynamiczne odświeżanie mniej poleceń?

141

Podoba mi się to watchpolecenie, ale ma swoje ograniczenia .

Jestem ciekaw, czy mogę naśladować funkcjonalność watchz less. Szukam przede wszystkim możliwości przewijania mojego katalogu, ponieważ jest on dynamicznie modyfikowany za pomocą działającego skryptu.

Zaid
źródło
Szukam tail -f foo.log | grep bari mogę dynamicznie zmieniać polecenie grep po ponownym uruchomieniu potoku tail / grep.
Alexander Mills,

Odpowiedzi:

119

W lessmożna wpisać, Faby kontynuować czytanie na końcu pliku (np. tail -f); możesz wpisać :ei nazwę pliku, aby wyświetlić inny plik, ale niestety, jeśli wpiszesz nazwę bieżącego pliku, plik lessnie zostanie ponownie załadowany. Istnieje jednak sztuczka polegająca na ponownym odczytaniu bieżącego pliku, sugerowana przez sabgenton : wpisz :ei wprowadź nazwę nieistniejącego pliku ; powoduje to, że less wyświetla komunikat o błędzie, a następnie ponownie ładuje bieżący plik.

Jeśli szukasz alternatywy dla watch ls, oto kilka:

  • Nowoczesne menedżery plików (np. Nautilus, Thunar, Konqueror, Dolphin, Finder) odświeżają widoki w czasie rzeczywistym.
  • Emacs nie ma odświeżania w czasie rzeczywistym, ale za pomocą auto-revert-modebędzie ładować plik lub katalog co 5 sekund (opóźnienie można skonfigurować).
  • Chociaż w3m jest przede wszystkim przeglądarką internetową, tworzy przeglądarkę katalogów i plików tekstowych. Naciśnij, Raby ponownie załadować (lokalny) adres URL.
Gilles
źródło
6
Dla mnie: e randomnamejkdlfjldf nie ładuje nieistniejącej nazwy pliku, a następnie ponownie ładuje z powrotem do bieżącego pliku: D
sabgenton
1
@sabgenton Dzięki, nie wiedziałem o tym. To świetna sztuczka. Dodałem ją do mojej odpowiedzi, ale możesz ją opublikować jako własną odpowiedź (mam nadzieję, że Zaid ją zaakceptuje).
Gilles
1
@CMCDragonkai Nie, less +Fogląda tylko załączone treści. Służy :e nonexistentfiledo ponownego odczytu całkowicie zmienionego wejścia.
Gilles
1
Czy jest do tego flaga wiersza poleceń?
CMCDragonkai 19.04.16
3
@PaulWagland Nie, Rniezawodnie odświeża plik. Odświeża ekran i usuwa niektóre bufory wejściowe, ale tak naprawdę nie przeładowuje danych z pliku w każdych okolicznościach (tylko jeśli plik jest duży? Nie zagłębiłem się głęboko w kod).
Gilles,
65

Shift+Fuczyni lesspodobnym do tailf. Oznacza to, że zostanie odświeżony, jeśli do pliku zostanie dołączonych więcej danych.

balki
źródło
7
Pamiętaj, że działa to tylko w przypadku dodatków. Jeśli linie zostaną usunięte lub edytowane w miejscu, lessnie pokażą tych zmian.
Nathaniel M. Beaver
Jak zatrzymać tryb śledzenia i ponownie przejść do trybu przewijania?
Tom Hale
1
<kbd> Ctrl + C </kbd>
balki
1
balki Z mojego doświadczenia wynika, że ​​to zabija polecenie przesyłające dane, jeśli używasz $COMMAND | less. Zastanawiam się, czy jest na to dobry sposób? Możesz robić takie rzeczy, $COMMAND > /tmp/file & less /tmp/fileale to nie jest zbyt miłe.
Att Righ
@AttRigh Nigdy nie zabiłem mojego polecenia (jednak czytam logi z uruchomionymi poleceniami w ten sposób, technicznie nie
przesyłam
41

Po prostu wpisz:

less +F filename

To emuluje naciśnięcie „F” w edytorze.

jhclark
źródło
1
Dzięki; dodał alias alias check="less +F"do mojego .bashrc.
Luke Davis
22

manstrony mogą być bardzo pouczające. Nie zastraszaj ich. Między innymi man lessmówi , że możesz użyć Rpolecenia, aby:

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

(Zdaję sobie sprawę, że to pytanie ma ponad 6 lat, ale pojawia się przy wyszukiwaniu w Google, więc nie jestem jedynym, który kliknął link, aby się tutaj dostać).

destenson
źródło
7
Powoduje to odświeżenie ekranu na wypadek, gdyby został zakłócony przez wyjście z innego programu. Nie konsekwentnie ładuje ponownie pliku. Nie zagłębiłem się głęboko w kod, aby zobaczyć, co robi, eksperymentalnie krótkie pliki nie są ładowane ponownie. Strony man nie zdecydowanie mnie zastraszają i mówię, że ten opis jest źle sformułowany: „odmalowanie” nie oznacza, że ​​dane wejściowe są ponownie odczytywane, a rzeczywiste zachowanie nie pasuje do „przydatne, jeśli plik się zmienia” (może to błąd? Nie wiem, skoro nie wiem, co ma zrobić polecenie) ..
Gilles,
Nie jestem ekspertem i nie czytałem również kodu źródłowego less, ale robi to, zapominając o tym, co już wie o pliku i ładuje go ponownie, odświeżając dane wyjściowe na podstawie danych, które ładuje ponownie. Pytanie brzmi „Czy istnieje sposób na dynamiczne odświeżenie mniejszej liczby poleceń?” Gdybym przeczytał wyjaśnienie pytania dokładniej przed udzieleniem odpowiedzi, mógłbym nie odpowiedzieć, ponieważ twierdzą, że chcą „przewinąć mój katalog, ponieważ dynamicznie modyfikuje się go za pomocą działającego skryptu”. mniej nie byłoby do tego właściwym poleceniem.
destenson
Działa dla mnie dobrze, nawet przy użyciu plików o długości 3 bajtów. Nie mogę sobie wyobrazić, dlaczego to też nie działa w przypadku większych plików.
Addison
1
Wspaniały! Dla mnie działa zarówno na krótkie, jak i długie pliki. Właśnie zauważyłem dwa możliwe problemy: 1. lessnie otworzyłem ponownie pliku, używając jego nazwy pliku - tj. Gdy zmienił się i-węzeł pliku (jak w przypadku nadpisywania pliku za pomocą mv), wówczas pozostała zawartość pliku (prawdopodobnie stary i-węzeł został ponownie odczytany) - - 2. Pierwszy wyświetlany wiersz prawdopodobnie zaczyna się od tego samego przesunięcia bajtu, co w oryginalnej treści pliku. Tak więc, gdy zmieniają się długości linii, pierwsza wyświetlana linia może być niekompletna, a wyświetlane linie mogą się przesuwać w górę / w dół.
pabouk
Rnie zawsze działa. Zobacz unix.stackexchange.com/questions/4351/…
wisbucky
5

Klawisz „F” podczas uruchamiania lesswykona „podążanie” podobnie tail -f, ale nie jestem pewien, czy osiągnie to, czego tu szukasz.

Dave Jennings
źródło
5

Zwykle po prostu piszę, Gaby dopasować wynik jednorazowo. Uważam to za szczególnie pomocne w sieciowym systemie plików, takim jak CIFS.

jorb
źródło
Jest to bardziej odświeżenie na żądanie pliku otwartego z mniejszą liczbą. Oprócz przeskakiwania na koniec pliku, również przeładowuje plik, jeśli został zmieniony.
jorb
1
Dzięki. Za pierwszym razem nie odświeżyło się dla mnie, ale teraz wydaje się działać poprawnie. U człowieka nie jest napisane, że odświeża plik. man less: „G lub> lub ESC-> Idź do wiersza N w pliku, domyślnie koniec pliku.” Usuwam tutaj moje stare błędne komentarze, przepraszam za nie.
Yaroslav Nikitenko
1
BTW, co nazywacie „jednorazową podstawą”? Opiekun less, Mark Nudelman, odpowiedział, co następuje: „Komenda G zazwyczaj nie wymusić ponowne odczytać z pliku jak polecenia R nie mogą wydawać się zrobić, że jeśli koniec pliku nie został jeszcze czytać, gdy G. jest wywoływany, tak że przeskakiwanie na koniec pliku musi po raz pierwszy odczytać tam dane. Na przykład, jeśli przeskoczysz do końca za pomocą G, następnie przejdziesz z powrotem do początku za pomocą 1G, a następnie inny program zmodyfikuje dane o koniec pliku (bez zmiany długości), ”(ciąg dalszy)
Yaroslav Nikitenko
(ciąg dalszy) „następnie przeskakujesz do końca ponownie za pomocą G, nie zobaczysz zmodyfikowanych danych. Ale jeśli nie przejdziesz do końca i wrócisz do początku, to przy pierwszym uruchomieniu polecenia G musi ono przeczytać dane tam zawarte po raz pierwszy i oczywiście zobaczą wszelkie modyfikacje, które nastąpiły, ponieważ mniej przywołano po raz pierwszy. ”
Jarosław Nikitenko
W tym przypadku wspomniałem, że jest to odświeżenie jednorazowe, a nie odświeżanie dynamiczne , które jest częścią tego, co zadaje oryginalne pytanie.
stycznia
1

Możesz użyć vima do odczytania pliku, a następnie dodać następujące mapowanie do swojego .vimrcpliku i możesz łatwo ponownie załadować plik za pomocą ,r:

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

Uwaga: jeśli plik był już edytowany, vim będzie narzekał. Po prostu zmień na

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

Zignorować zmiany.

puk
źródło
Będą musieli podważać vimtwoje zimne, martwe ręce. Kontekst pytania dotyczy less, ale jako osoba z tendencjami monomaniackimi sympatyzuję!
Benjamin R
1

Rbo odmalowanie nie zawsze przeładowuje plik. [1]

Obejściem, które zawsze przeładowuje plik, jest naciśnięcie hq, co otworzy stronę pomocy, a następnie zamknięcie. Ma to efekt uboczny, zmuszając plik do ponownego załadowania.


[1] Oto kilka przykładów sytuacji, które się Rładują i nie ładują ponownie:

  • >i >>zmiany: Daj się ponownie załadować
  • sed -i, gEdit, TextEdit: NIE ładuj ponownie
  • W systemie Linux vizmiany: ZOSTAŁY ponownie załadowane
  • Na Macu vizmiany: NIE ładuj ponownie

Uważam, że różnica sprowadza się do tego, czy zmienia się i-węzeł (można to sprawdzić za pomocą ls -i foo.txt). Jeśli i-węzeł się zmieni, to Rnie będzie działać.

wisbucky
źródło
0

Możesz tail -fzamiast tego potokować, spowoduje to, że będziesz śledzić dane wyjściowe. Tracilibyście jednak możliwość poruszania się (przewijania) przez swoje wyjście.

Gert
źródło
0

Jeśli nie masz nic przeciwko używaniu przeglądarki, możesz uruchomić serwer internetowy Algernon za pomocą tego polecenia:

algernon -a -t /directory/name

Lista plików zostanie następnie wyświetlona i automatycznie odświeżona na stronie http: // localhost: 3000 /

Alexander
źródło
Niewłaściwy wątek?
Tomasz
Wygląda na to, że jest to sposób na obejrzenie katalogu, choć daleko do niegoless
Jeff Schaller
0

Właśnie znalazłem ten wątek, jak każdy inny. Chciałbym dodać rozwiązanie, gdy jesteś już na końcu pliku, użycie „g”, a następnie „G” wymusi odświeżenie pliku.

W moim programie terminalowym (SecureCRT) skończyło się tworzenie przycisku makr. Makro to po prostu „gG”.

ZMitchell
źródło