Ответы:
Идея состоит в том, чтобы передать вывод tail
через sed
и заменить символ новой строки колоколом / символом новой строки.
Но, вероятно, есть более простое решение, если вы используете tail
в X-Window . Там вы можете выполнить действие при изменении содержимого окна (мерцание, звонок, что угодно).
sed
идея блестящая, но я не знаю достаточно «sed», чтобы заставить ее работать, похоже, я не могу перехватить переводы строк в регулярном выражении обычным способом (к которому я привык), думаю, мне нужно сказать sed не интерпретируйте входящий поток построчно.
sed -e $'s/$/\a/'
добавляет $'\a'
(символ колокола в синтаксисе ksh / bash / zsh) в конце каждой строки.
sed
Регулярное выражение немного странно для моих наивных глаз.
$'...'
синтаксис не универсален. Например, [t] csh не поддерживает это.
если вы используете GNU screen
, вы можете настроить его на «наблюдение» за окном с хвостом, и оно сообщит вам в строке состояния или по колоколу, определенному вашим termcap, о появлении нового вывода в этом окне.
http://www.gnu.org/software/screen/manual/html%5Fnode/Monitor.html#Monitor
редактировать: просто нужно было добавить это, так как вы упомянули Mac OS X
просто для удовольствия, если вы искали что-то конкретное, вы можете использовать say
команду Mac OS X, чтобы прочитать вам файл, который вы смотрите. просто получите logtail
команду от:
http://www.hmug.org/pub/MacOS_X/BSD/Administration/Log/logcheck/
И использовать его в сценарии, как:
#!/bin/bash
file=$1
offset=$(basename "$1")
# while true... let this thing run until it's killed...
while true; do
output=$(/usr/local/bin/logtail $file .${offset}.offset)
if [ ! -z "$output" ]; then
# print the output and say ding
echo "$output" && say ding
# to have the file read aloud to you, uncomment the following:
say "$output"
fi
# recheck every 5 seconds
sleep 5
done
screen
показывает и предупреждает (я думаю, что я могу сделать это также и звонок) ТОЛЬКО ОДИН РАЗ. Не для каждого нового события, которое происходит (не для каждой новой доступной строки)
beep
команду вместо say
.
exec
команду экрана, чтобы сделать это. Пример на странице руководства - это то, !:sed -n s/.*Error.*/\007/p
что будет отправлять звонок каждый раз, когда в этом окне отображается «Ошибка».
Вы можете использовать мультитейл . Это расширенный хвост, который поддерживает выполнение команд при сопоставлении регулярных выражений.
Например, следующая команда воспроизводит звук и открывает окно xmessage каждый раз, когда марсианский исходный пакет регистрируется.
multitail -ex "martian source" "play beep.wav; xmessage " -i /var/log/messages
Просто для записи, как @Nils предложил, я использую, sed
чтобы добавить bell
к каждой строке.
sed
Линии обеспечивается @Gilles
sed -e $'s/$/\a/'
работает на моем Mac (я включил «звуковой звонок» и «визуальный звонок» в моем терминале \ предпочтения \ расширенный).
$'...'
escape-последовательности предназначены только для Bash.
Для тех, кто находит эту страницу, я использую tcsh, и это работает:
tail -f changingfile | sed -e 's/.*/& \a/'
Не спрашивайте меня, что означает синтаксис sed ...
Вы можете попробовать, konsole
который позволяет оповещение о новой активности (или молчание) в любой вкладке.
konsole
что это будет похоже на screen
предупреждение один раз, в то время как мне нужно получать предупреждение для каждой новой строки.