Добавление поведения хвоста, где ввод добавляет пустые строки к меньшему

8

Мне нравится less, что я могу использовать, чтобы следить за журналами с +Fфлагом (или ShiftFгорячей клавишей), искать вперед и назад и вообще свободно перемещаться по документу.

Но в этом отсутствует одна вещь less: обычно я нахожусь в конце файла и хочу видеть, что происходит что-то новое. В tail -fI просто ударил enterнесколько раз, и новые строки журнала просто появляются четко отделены от старых линий.

Можно ли добавить это к less? Как?

blueFast
источник
Я не думаю, что вы можете сделать это, хотя иногда я буду делать echo -e '\ n \ n \ n \ n \ n' >> / dev / pts / 0, например, это не так чисто, но по крайней мере позволяет у меня есть точка отсчета, где я остановился, когда я смотрю в сторону.
Дэвид Хоуд

Ответы:

6

Это не совсем tailповедение - это терминал. Tail просто отправляет поток вывода на стандартный вывод, который идет на ваш терминал, и вы вставляете пустые строки в середину этого вывода, нажимая ввод. Сам Хвост на самом деле не принимает от вас информации вообще. Вы можете ввести все, что вы хотите, и это тоже появится.

lessоднако это консольное приложение, которое принимает данные и обрабатывает их. Он управляет консолью с помощью последовательностей управления терминалом, и вы можете прокручивать их. Разрешение вставлять произвольные символы в поток может испортить отображение и в любом случае использовать ваш ввод для управления программой.

К сожалению, кажется, что нет способа визуально пометить текущую позицию. Тем не менее, это не страшный запрос на добавление новых функций , и тем не менее , время от времени появляются новые функции.

mattdm
источник
У вас есть ссылка, чтобы запросить эту функцию для менее обслуживающего персонала?
BlueFast
@gonvaled gnu.org/software/less
Michael Hampton
4

Я нашел ваш вопрос, когда искал тот же ответ для себя.

Разочарованный принятым ответом, я нашел обходной путь. Это не идеально, но позволяет мне отмечать мою позицию в журнале, с которым я слежу less, и в этом весь смысл.

Я создал небольшой исполняемый скрипт (я его назвал marklog) со следующим содержимым и поместил его в мой путь:

#!/bin/sh
echo >> $1
echo >> $1
echo >> $1
echo `date` ---------------------------------------------------------------------- >> $1
echo >> $1
echo >> $1

Конечно, это работает только в том случае, если у вас есть доступ на запись в файл журнала, что может стать нарушителем во многих ситуациях. Я также создал эту версию, которую я использую для записи в файлы журналов, которые мне не принадлежат (но к которым у меня есть доступ sudo):

#!/bin/sh
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo `date` ------------------------------------------------------------------------- >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"

Эти сценарии обеспечивают именно тот визуальный разрыв, который я искал. Есть как минимум 3 способа их использования:

  1. В точке, где вы обычно нажимаете, введите несколько раз при использовании tail -f, вместо этого запустите marklogс другого терминала (предоставив путь к файлу журнала в качестве аргумента).

  2. Используйте CtrlZдля приостановки, lessчтобы вы могли запустить скрипт в том же окне терминала, но когда вы переориентируете less(используя fg, конечно), он больше не будет в режиме «следовать», поэтому вам нужно будет нажать ShiftFснова ...

  3. И наконец, - и это может быть наиболее удобным способом, потому что вам не нужно вводить путь к файлу журнала: запустите marklogнепосредственно less, набрав !marklog %. Lessзаменит текущее имя файла для %. Тем lessне менее, не будет отвечать на! пока он находится в режиме «следуй», так что тебе придется CtrlCсначала нажать, чтобы выйти из режима следования, запустить !marklog %, затем ShiftFснова.

С помощью метода 3 вы также получаете дополнительный бонус истории команд Less: просто нажмите !и затем используйте стрелку вверх, чтобы выбрать самую последнюю команду (для меня это всегда marklog).

Надеюсь, это поможет кому-то так же, как уже помогло мне.

Lambart
источник
1

Нажмите Shift+ Fв конце файла и меньше начнет работать как tail -f.

kofemann
источник
2
Нет не будет Это будет следовать за новыми линиями, но это не будет работать как tail -f. В частности, он не примет ввод как новые строки, что является единственным пунктом моего вопроса. Кроме того, я уже упоминал Shift+Fв вопросе (с небольшой ошибкой, должен сказать)
blueFast
1

Я не думаю, что вы можете сделать это. Я использовал mи 'для обозначения достопримечательностей, а затем снова пошел к ним, но это не дает того разделения, которое вы просите. Возможно, что-то вроде мультитейла будет делать то, что вы хотите.

user9517
источник
-1

Ответ от Ламбарта подводит меня к моему любимому решению. Спасибо Ламбарту!

Просто введите следующий режим ctrlcи войдите !printf "\n\n---$(date)---\n\n" >> %. После этого вам нужно нажать enterеще раз и нажать, shiftfчтобы начать снова после файла.

IRAS
источник