Чи є спосіб динамічно оновити команду менше?


141

Мені подобається watchкоманда, але вона має свої обмеження .

Я хотів би знати , чи можу я імітувати функціональність watchз less. Я в основному шукаю можливість прокручування мого каталогу, оскільки він динамічно змінюється через запущений сценарій.


Я шукаю tail -f foo.log | grep barта зможу динамічно змінювати команду grep із перезапуском конвеєра хвост / греп.
Олександр Міллс

Відповіді:


119

В less, ви можете ввести , Fщоб тримати читання в кінці файлу (наприклад tail -f); Ви можете ввести :eі ім'я файлу, щоб переглянути інший файл, але, на жаль, якщо ви введете ім'я поточного файлу, файл lessне буде перезавантажено. Однак є хитрість, щоб змусити його повторно прочитати поточний файл, запропонований sabgenton : введіть :eта введіть ім’я неіснуючого файлу ; через що менше відображається повідомлення про помилку, а потім перезавантажується поточний файл.

Якщо ви шукаєте альтернативу watch ls, ось декілька:

  • Сучасні файлові менеджери (наприклад, Nautilus, Thunar, Konqueror, Dolphin, Finder) оновлюють представлення даних у режимі реального часу.
  • У Emacs немає оновлення в режимі реального часу, але за допомогою програми auto-revert-modeвін буде перезавантажувати файл або каталог кожні 5 секунд (затримка налаштовується).
  • Незважаючи на те, що w3m - це передусім веб-браузер, він робить прохідний переглядач каталогу та текстових файлів. Натисніть, Rщоб перезавантажити (локальну) URL-адресу.

6
Для мене: e randomnamejkdlfjldf не вдається завантажити неіснуюче ім'я файлу, а потім перезавантажується назад у поточний файл: D
sabgenton

1
@sabgenton Спасибі, я цього не знав. Це чудова хитрість. Я додав її до своєї відповіді, але ви можете опублікувати її як власну відповідь (яку, сподіваюся, Заїд погодиться).
Жиль

1
@CMCDragonkai Ні, less +Fспостерігає лише за доданим вмістом. Використовуйте :e nonexistentfileдля перечитування повністю зміненого вводу.
Жиль

1
Чи є для цього прапор командного рядка?
CMCDragonkai

3
@PaulWagland Ні, Rфайл не надійно оновлює. Він оновлює екран і витирає деякі вхідні буфери, але насправді не перезавантажує дані з файлу за будь-яких обставин (тільки якщо файл великий? Я не копався глибоко в коді).
Жиль

65

Shift+Fзробить lessподібне до tailf. Тобто він оновлюється, якщо до файлу додається більше даних.


7
Зауважте, що це працює лише для додатків. Якщо рядки видалені або відредаговані на місці, lessці зміни не відображатимуться.
Натаніель М. Бівер

Як зупинити наступний режим і знову перейти в режим прокрутки?
Том Хейл

1
<kbd> Ctrl + C </kbd>
балки

1
balki Мій досвід полягає в тому, що це вбиває команду передачі даних, якщо ви використовуєте $COMMAND | less. Цікаво, чи є приємний спосіб цього? Ви можете робити такі речі, як це, $COMMAND > /tmp/file & less /tmp/fileале це не дуже приємно.
Att Righ

@AttRigh Я ніколи не вбивав свою команду (однак я читаю журнали запущених команд таким чином, я не збираюся менше, технічно)
jena

41

Просто введіть:

less +F filename

Це емулює натискання "F" в редакторі.


1
Дякую; додав псевдонім alias check="less +F"до мого .bashrc.
Люк Девіс

22

manсторінки можуть бути дуже інформативними. Не лякайтеся ними. Серед усього іншого, man lessви можете використовувати Rкоманду для:

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

(Я розумію, що цьому питанню більше 6 років, але він з’являється під час пошуку в Google, тому я не єдиний, хто натиснув на посилання, щоб потрапити сюди.)


7
Це перефарбовує екран у випадку, якщо його було порушено виведенням з іншої програми. Він не завантажує файл послідовно. Я не заглиблювався в код, щоб побачити, що він робить, експериментально короткі файли не завантажуються. Мені сторінки напевно не залякують, і я кажу, що цей опис погано сформульований: "перефарбовування" не означає, що вхід перечитується, а реальна поведінка не зовсім підходить "корисно, якщо файл змінюється" (можливо, це помилка? Я не знаю, оскільки я не знаю, що команда повинна робити) ..
Жил

Я не фахівець, і не читав вихідний код менше, але те, що він робить, це забути те, що він вже знає про файл, і перезавантажувати його, оновлюючи його вихід на основі вкладеного ним перезавантаження. Питання зазначає "Чи є спосіб динамічно оновити меншу команду?" Якби я прочитав пояснення питання більш ретельно перед тим, як відповісти, я, можливо, не відповів би, оскільки вони продовжують говорити, що хочуть "прокрутити мій каталог, оскільки він динамічно змінюється через запущений сценарій". менше не буде правильною командою для цього.
Дестенсон

Для мене добре працює навіть при використанні файлів довжиною 3 байти. Я не можу уявити, чому він також не працюватиме для великих файлів.
Аддісон

1
Чудово! Для мене він працює як для коротких, так і для довгих файлів. Щойно я помітив дві можливі проблеми: 1. lessне перезапустив файл за допомогою свого імені файлу - тобто коли вкладення файлу змінилося (як, наприклад, при перезаписі файлу з використанням mv), тоді старий вміст файлу залишився (можливо, перечитаний старий вклад) - - 2. Перший відображений рядок, ймовірно, починається з того самого зміщення байтів, що і у вихідному вмісті файлу. Отже, коли змінюються довжини рядків, перший відображений рядок може бути неповним, а відображені рядки можуть рухатися вгору / вниз.
пабук

Rне завжди працює. Дивіться unix.stackexchange.com/questions/4351/…
wisbucky

5

Клавіша "F" під час запуску lessзробить "слідування" схожим на tail -f, але я не впевнений, що це дозволить досягти того, що ви шукаєте тут.


5

Я, як правило, Gодноразово набираю хвіст на вихід. Я вважаю це особливо корисним у такій мережевій файловій системі, як CIFS.


Це більше оновлення файлу на вимогу, відкритого з меншою кількістю. Крім переходу до кінця файла, він також перезавантажує файл, якщо він змінився.
jorb

1
Дякую. Перший раз це не оновило мене, але зараз, здається, працює належним чином. У людині не написано, що воно оновлює файл. man less: 'G або> або ESC-> Перехід до рядка N у файлі, за замовчуванням - кінець файлу.' Я видаляю тут свої старі неправильні коментарі, вибачте їх.
Ярослав Нікітенко

1
До речі, що ви називаєте "разовою основою"? Супроводжуючі less, Марк Нудельман, відповів наступне: «Команда G зазвичай не змушує повторно прочитати з файлу , як команда R робить це може здатися зробити, якщо кінець файлу ще не був прочитаний , коли G. викликається, щоб перейти до кінця файлу, потрібно вперше прочитати дані там. Наприклад, якщо ви переходите до кінця з G, потім переходьте до початку з 1G, тоді інша програма змінює дані на кінець файлу (без зміни довжини), "(продовження)
Ярослав Нікітенко

(продовження) "тоді ви знову переходите до кінця за допомогою G, ви не побачите змінених даних. Але якщо ви не переходите до кінця і назад до початку, тоді, коли ви вперше виконаєте команду G, вона повинна прочитати дані там вперше, і, звичайно, вони побачать будь-які зміни, які відбулися з тих пір, як менше було вперше викликано ".
Ярослав Нікітенко

У цьому випадку я згадав, що це одноразове оновлення на відміну від динамічного оновлення, яке є частиною того, що задається оригінальним запитанням.
jorb

1

Ви можете використовувати vim, щоб прочитати файл, а потім додати до нього таке відображення, .vimrcі ви можете легко перезавантажити файл за допомогою ,r:

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

Зверніть увагу, якщо ви вже відредагували файл, vim поскаржиться. Просто змініть на

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

Ігнорувати зміни.


Їм доведеться вирватися vimз ваших холодних мертвих рук. У контексті питання йдеться про те less, але як хтось із самими одноманітними тенденціями, я співчуваю!
Бенджамін Р

1

Rfor repaint не завжди перезавантажує файл. [1]

Обхід, який завжди перезавантажує файл, - це натиснути hq, що відкриє сторінку довідки, а потім вийти. Це має побічний ефект змушування файлу до перезавантаження.


[1] Ось кілька прикладів ситуацій, які Rроблять і не перезавантажують:

  • >і >>зміни: DO перезавантажуються
  • sed -i, gEdit, TextEdit: НЕ перезавантажуйтесь
  • У Linux viзміни: DO перезавантажуються
  • На Mac viзміни: НЕ завантажуйтесь

Я вважаю, що різниця зводиться до того, чи змінюється вклад (ви можете перевірити ls -i foo.txt). Якщо вклад змінюється, тоді Rне вийде.


0

Ви можете надіслати його tail -fзамість цього, це призведе до того, щоб ви стежили за результатами. Однак ви втратили б можливість переміщатися (прокручувати) свої результати.


0

Якщо ви не проти використовувати браузер, ви можете запустити веб-сервер Algernon за допомогою цієї команди:

algernon -a -t /directory/name

Після цього список файлів буде показаний та автоматично оновлений за адресою http: // localhost: 3000 /


Неправильна нитка? ..
Томаш

Здається, це спосіб переглядати каталог, хоча це довгий шляхless
Джефф Шаллер

0

Я просто знайшов цю нитку, як ніхто інший. Я хотів би додати рішення, коли ви вже знаходитесь в кінці файлу, використання "g", а потім "G", примусить оновити файл.

Я в кінцевому підсумку створив макрокоманду для цього в своїй термінальній програмі (SecureCRT). Макрос просто "gG".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.