Хотя я не думаю, что у Pierr была такая проблема, мне нужно было решение, которое не задерживало бы вывод из живого «хвоста» файла, так как я хотел отслеживать несколько журналов предупреждений одновременно, добавляя к каждой строке префикс с именемсоответствующий журнал.
К сожалению, sed, cut и т. д. слишком много буферизировали и мешали мне видеть самые последние строки.Предложение Стивена Пенни использовать -s
параметр nl
было интригующим, и тестирование показало, что оно не вводило нежелательную буферизацию, которая меня беспокоила.
Было несколько проблем с использованием nl
,хотя это связано с желанием убрать ненужные номера строк (даже если вы не заботитесь об их эстетике, могут быть случаи, когда использование дополнительных столбцов было бы нежелательным).Во-первых, использование «вырезать» для удаления чисел вновь вводит проблему буферизации, так что это разрушает решение.Во-вторых, использование «-w1» не помогает, поскольку это НЕ ограничивает номер строки одним столбцом - оно становится шире, когда требуется больше цифр.
Это не очень красиво, если вы хотитезахватите это в другом месте, но так как это именно то, что мне не нужно было делать (все уже писалось для файлов журнала, я просто хотел посмотреть несколько одновременно в режиме реального времени), лучший способ потерять номера строк и иметь толькоМой префикс должен был начинать строку -s
с возврата каретки (CR или ^ M или Ctrl-M).Так, например:
#!/bin/ksh
# Monitor the widget, framas, and dweezil
# log files until the operator hits <enter>
# to end monitoring.
PGRP=$$
for LOGFILE in widget framas dweezil
do
(
tail -f $LOGFILE 2>&1 |
nl -s"^M${LOGFILE}> "
) &
sleep 1
done
read KILLEM
kill -- -${PGRP}