Чи є спосіб зробити хвіст -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.