Quero que o meu PC faça um bipe no sistema em todos os eventos de cauda
Eu tenho o seguinte comando
tail -f development.log | grep "something rare"
existe uma maneira fácil como canalizá-lo para algo que emite um sinal sonoro? gostar
tail -f development.log | grep "something rare" | beep
se sim, a saída grep ainda será mostrada?
Respostas:
Basta definir da
beep
seguinte maneira:Então, você pode usar seu comando:
fonte
sed
ou similar (entre tail e grep) para com um regexp, substituindo-osomething rare
muitas vezes. Quantas vezes isso precisa ser feito depende de quanto o tubo é armazenado no buffer.tail -f development.log | stdbuf -oL -eL grep "something rare" | beep
A tela GNU possui um recurso embutido para emitir um bipe quando uma janela é alterada: consulte a seção relevante da página de manual .
Resumo do título:
Como apontado nos comentários, este será emitido um bipe em cada nova entrada de log, não apenas nas que correspondem a "algo raro"; portanto, isso não faz exatamente o que o OP solicitou. Ainda é um truque útil para conhecer o IMHO.
Você pode obter o melhor dos dois mundos abrindo duas
screen
janelas (<C-a> c
para abrir uma janela,<C-a> <C-a>
para alternar entre duas janelas):tail -f yourfile.log | grep 'something rare'
tail -f yourfile.log
Em seguida, você pode ficar assistindo o log rolar na janela 2 e será acionado da janela 1 quando "algo raro" ocorrer.
screen
é incrivelmente versátil - eu recomendo a leitura.fonte
tail -f yourfile.log | grep something\ rare
mais do que apenas otail -f logfile
something rare
. Editado para refletir isso. O grep funcionaria, mas ele não veria o resto do log, apenas as linhas raras - pelo que entendi, ele quer poder observar o log inteiro rolando, mas ser alertado sobre eventos específicos.Você pode impedir que a saída seja armazenada em buffer no comando grep. Veja man grep para detalhes.
Você pode canalizar a saída grep em um bipe.
O exemplo a seguir é do man beep ...
Há muitas coisas boas nesses manuais. Se não tivéssemos que lê-los para encontrá-lo. ;-)
fonte
O comando watch possui uma opção --beep, e você também pode definir o intervalo de pesquisa, mas o padrão com 2 s deve estar ok
fonte
watch
funciona executando seu parâmetro / comando em todas as seções (intervalos) e depois obtendo os resultados para a execução anterior. Assim, você vai querer usar a versão normal do comando tail, em vez de usartail -f
watch --beep
e embrulhar minha cauda / grep, eu ainda não ouvi um sinal sonoro).Você pode usar sed para adicionar o controle-G da seguinte maneira:
ou apenas em linhas raras, sem usar grep, da seguinte maneira:
que diz: nas linhas onde algo raro ocorre, é tudo ubstitute para a mesma coisa com o controle-G pregado na extremidade, e impressão (mas não imprimir as linhas não correspondentes). Funciona bem!
fonte
Hum, complicado. Talvez pudéssemos fazer algo assim?
Ou no seu caso
Parece estar fazendo algum buffer embora. Vou procurar se há uma maneira de desativar esse buffer pelo
for
loop.Aparentemente, você deve poder ajustar o buffer do pipe usando,
ulimit -p
mas isso continua reclamando de argumento inválido para mim. Eu também encontrei um post que afirma que você precisa recompilar o kernel para alterar esse limite.fonte
Em um trabalho anterior, eu não conseguia encontrar um observador confiável apenas com command-fu, então eu tinha um script de wrapper como o abaixo, que inspecionava o arquivo a cada segundo de poll_duration e preenchia as novas linhas da frase interessada.
Isso foi em uma máquina Unix. No Linux, você pode melhorar ainda mais usando sua interface inotify filewatcher. Se este pacote ( inotify-tools no Ubuntu) estiver presente, substitua
com
Essa chamada é bloqueada até que o arquivo seja modificado. A versão de bloqueio é quase tão eficiente quanto a que você obteria com a
tail -f
versão se o pipe pudesse ser configurado para funcionar sem buffer.Nota: O script primeiro faz um
head --lines=$new_linecount
para garantir que as linhas adicionadas ao arquivo após a verificação não distorcem a parte do arquivo que é verificado nesse loop.fonte