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.

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).


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

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

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).


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 ...


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.


Eu imagino konsoleque seria como screenalertas uma vez, enquanto eu preciso receber um alerta para cada nova linha.
— 24511 Ali Ali
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.