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
tail
reportar, então você precisa detail
para 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)