Чи є спосіб зробити хвіст -F звуковий сигнал?


23

Чи є спосіб зробити tail -Fабо подати lessзвуковий сигнал (дзвонити в термінал), коли надходять нові дані (у файл додається новий рядок). Або є якась інша утиліта Unix, щоб зробити це на Linux або Mac.

Відповіді:


13

Мігією ідеї є трубопровід tailнаскрізний sedі замінити нову лінію на дзвінок / новий рядок.

Але, можливо, є простіше рішення, якщо ви використовуєте tailвсередині x-вікна . Там ваш може виконати дію, коли зміст вікна змінюється (мерехтіння, дзвінок, що завгодно).


4
Не замінюйте новий рядок, а додайте його в кінці рядка.
Кевін

@Nils, ця sedідея геніальна, але я не знаю достатньо 'sed', щоб вона працювала, схоже, я не можу зафіксувати нові рядки в regexpt звичайним способом (до чого я звик), я думаю, мені потрібно сказати sed не інтерпретувати вхідний потік рядок за рядком.
Алі

5
@Ali Дійсно, sed діє по черзі, і ви не бачите прямо нових рядків. sed -e $'s/$/\a/'додає $'\a'(символ дзвінка в синтаксис ksh / bash / zsh) в кінці кожного рядка.
Жил 'SO- перестань бути злим'

Дякую @Gilles, працював як шарм (на mac теж)! sedregexpt трохи дивний для моїх наївних очей.
Алі

1
@Gilles: Зауважте, що $'...'синтаксис не є універсальним. Наприклад, [t] csh не підтримує його.
Кіт Томпсон

13

якщо ви використовуєте GNU screen, ви можете встановити його на "перегляд" вікна хвостиком, і він сповістить вас у вашому рядку стану або у визначеному дзвонику термінальної капи про те, що в цьому вікні є новий вихід.

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

Дякую @Tim,, screenпоказує та попереджає (я думаю, я можу змусити його також дзвонити в дзвін) ТОЛЬКО ВСЕ . Не для кожної нової події, що трапляється (не для кожного нового рядка, який доступний)
Алі

1
я додав приклад для mac, який міг прочитати файл. ви можете змінити це для роботи для Linux, встановивши версію linux logtail та beepзамість команди використовуючи команду say.
Тім Кеннеді

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

1
Для цього також можна використовувати execкоманду екрана . Приклад на сторінці, !:sed -n s/.*Error.*/\007/pщо надсилатиме дзвінок щоразу, коли у цьому вікні відображатиметься повідомлення "Помилка".
Арседж

Те саме стосується і Tmux.
0xC0000022L

10

Ви можете скористатися багатоповерхівкою . Це вдосконалений хвіст, який підтримує виконання команд у регулярному збігу виразів.

Наприклад, наступна команда відтворює звук і відкриває вікно передачі повідомлень щоразу, коли реєструється марсіанський вихідний пакет.

multitail -ex "martian source" "play beep.wav; xmessage " -i /var/log/messages

4

Тільки для запису, як @Nils запропонував я використовувати sedдля додавання bellдо кожного рядка.

sedЛінії забезпечується @Gilles

sed -e $'s/$/\a/' 

працює на моєму комп'ютері (я ввімкнув "звуковий дзвінок" і "візуальний дзвоник" у своєму терміналі \ налаштування \ розширений).


Слід зазначити, що $'...'послідовності втечі - це лише баш.
амфетамахін

@amphetamachine спасибі, хоча я сам баш-користувач, було б добре, якщо ви чи інші можете додати версії, які також працюватимуть і на інших оболонках.
Алі

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

1

Для всіх, хто знайде цю сторінку, я використовую tcsh, і це, здається, працює:

tail -f changingfile | sed -e 's/.*/& \a/'

Не питайте мене, що означає синтаксис sed ...


1
Я не можу допомогти собі, я мушу запитати, чи можете ви пояснити вираз sed?
Ашвані Агарвал

0

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


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