Existe uma maneira de emitir um bipe de cauda -F?

23

Existe uma maneira de emitir tail -Fou emitir um lesssinal sonoro (tocar a campainha em um terminal) quando novos dados chegarem (uma nova linha será adicionada ao arquivo). Ou existe algum outro utilitário unix para fazer isso em um linux ou mac.

Todos
fonte

Respostas:

13

Uma idéia migth ser a de canalizar a saída do tailmeio sede substituir a nova linha com o sino / nova linha.

Mas existe uma solução mais fácil se você usar taildentro de uma janela x . Lá você pode executar uma ação quando o conteúdo da janela for alterado (cintilação, campainha, o que for).

Nils
fonte
4
Não substitua a nova linha, adicione-a no final da linha.
23411 Kevin
@ Nils, essa sedidéia é brilhante, mas eu não conheço o suficiente 'sed' para fazê-lo funcionar, parece que não consigo capturar novas linhas no regexpt da maneira usual (com que estou acostumado), acho que preciso dizer ao sed não interprete o fluxo de entrada linha por linha.
Ali
5
@ Ali Ali, sed atua linha por linha e você não vê diretamente as novas linhas. sed -e $'s/$/\a/'adiciona um $'\a'(caractere de sino na sintaxe ksh / bash / zsh) no final de cada linha.
Gilles 'SO- stop be evil' (
Obrigado @Gilles, funcionou como um encanto (em um mac também)! sedregexpt é um pouco estranho para os meus olhos ingênuos.
Ali
1
@ Gilles: Observe que a $'...'sintaxe não é universal. Por exemplo, [t] csh não suporta isso.
Keith Thompson
13

se você usa o GNU screen, pode configurá-lo para "vigiar" a janela com a cauda, ​​e ele o alertará na barra de status ou pelo sino definido pelo termcap, de que há uma nova saída nessa janela.

http://www.gnu.org/software/screen/manual/html%5Fnode/Monitor.html#Monitor


edit: bastava adicionar isso, pois você mencionou o mac os x

apenas por diversão, se você estava procurando algo em particular, pode usar o saycomando do Mac OS X para ler o arquivo que está assistindo. basta obter o logtailcomando, de:

http://www.hmug.org/pub/MacOS_X/BSD/Administration/Log/logcheck/

E use-o em um script como:

#!/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 Kennedy
fonte
Obrigado @ Tim, screenshows e alertas (acho que também posso tocar a campainha) SOMENTE UMA VEZ. Não para cada novo evento que acontece (não para cada nova linha que está disponível)
Ali
1
eu adicionei um exemplo para mac que poderia ler o arquivo para você. você pode mudar isso para funcionar no linux instalando a versão linux do logtail e usando o beepcomando, em vez de say.
Tim Tim
legal! Isso é criativo, embora no meu caso eu esteja usando o sinal sonoro para poder monitorar um arquivo de log sem olhar para a tela. E o sinal sonoro real pode ser melhor que uma voz.
Ali
1
Também pode usar o execcomando da tela para fazer isso também. O exemplo na página de manual é o !:sed -n s/.*Error.*/\007/pque enviará uma campainha toda vez que "Erro" for exibido nessa janela.
Arcege 24/11/11
O mesmo se aplica ao Tmux.
0xC0000022L 15/09
10

Você pode usar multitail . É uma cauda aprimorada que suporta a execução de comandos na correspondência de expressões regulares.

Por exemplo, o comando a seguir reproduz um som e abre uma janela do xmessage toda vez que um pacote de origem marciana é registrado.

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

Apenas para o registro, como @Nils sugeriu que eu estou usando sedpara adicionar um bella cada linha.

A sedlinha fornecida por @Gilles

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

funciona no meu mac (ativei "sino audível" e "sino visual" no meu Terminal \ preferências \ avançado).

Todos
fonte
Digno de nota é que as $'...'seqüências de escape são apenas para Bash.
Amphetamachine
@ amphetamachine obrigado, enquanto eu sou um usuário do bash, seria bom se você ou outras pessoas pudessem adicionar versões que funcionariam em outros shells também.
24511 Ali Ali
Eu também sou um usuário do bash, mas estou aprendendo lentamente o que funcionará e o que não funcionará em outros shell.
Amphetamachine
1

Para qualquer pessoa que encontre esta página, estou usando o tcsh e isso parece funcionar:

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

Não me pergunte o que significa a sintaxe sed ...

Raymond
fonte
1
Eu não posso me ajudar, tenho que perguntar, você pode explicar sua expressão?
Ashwani Agarwal
0

Você pode tentar o konsoleque permite alertas sobre novas atividades (ou silêncio) em qualquer guia.

Aaron D. Marasco
fonte
Eu imagino konsoleque seria como screenalertas uma vez, enquanto eu preciso receber um alerta para cada nova linha.
24511 Ali Ali