Хотя я не думаю, что у 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}
person
ScriptGuy
schedule
07.03.2014