Supondo que você pode reiniciar o programa e colocá-lo em um pipe, você pode canalizá-lo para xargs , com as seguintes ressalvas:
- você deseja executar o comando uma linha por vez (-n 1)
- você quer colocar a saída dentro de um parâmetro (-i)
- você provavelmente quer que a mensagem seja executada assim que o
tailreportar, então você precisa detailpara ser linha em buffer .
Dependendo do que você instalou:
stdbuf -o 0 tail -f FILE | xargs -i -n 1 terminal-notifier --message "{}"
unbuffer tail -f FILE | xargs " "
e eu vi uma versão tailf que suportava a opção -l (line-buffered).
Você também pode emular tail -f em Perl.
E você pode substituir xargs (mesmo que seja padrão e onipresente) por um loop for especialmente criado no shell (mas não é tão simples quanto parece; é semelhante para processar nomes de arquivos com espaços em um loop).
Se você não puder reiniciar o programa, precisará interceptar sua stdout. Aqui está uma resposta de estouro de pilha sobre isso. Outros utilitários e scripts, como reredirect , são descritos aqui ; Eu não sei sobre a compatibilidade deles com o MacOS.
Modificações adicionais
A saída pode ser analisada normalmente com utilitários como sed ou cut:
cauda sem buffer -f FILE | grep animal | sed-e / animal (. *) engrenagem / \ 1 / '| xargs ...
Dessa forma, teríamos:
Output by tail output by grep output by sed
correct horse battery staple
animal rhino gear animal rhino gear rhino
llama is animal llama is animal llama is animal
llama peruvian
animal ant gearbox animal ant gearbox antbox
( --line-buffered opção para grep pode ser usada)