Eu tenho um cenário onde eu quero filtrar arquivos de log. Para fazer isso eu estou querendo seguir as últimas 10 linhas ou mais de um arquivo de log e como novas linhas são lidas, canalizá-las através de um programa awk e redirecionar a saída para uma porta de escuta em um host remoto via netcat.
Atualmente meu script tem a seguinte linha:
echo "\`awk -f rules.awk <(tail -F $@)\`" | nc -u 127.0.0.1 5004
Onde $@
é a lista de argumentos fornecida na chamada inicial e o rules.awk simplesmente contém alguns padrões desejados para combinar.
Chamando o script com ./script logfile.log
parece não fazer nada e o script trava. Eu especulo que o pipe realmente requer que um processo termine antes que sua saída final seja canalizada para o novo comando.
Então eu tentei uma abordagem diferente executando o seguinte no meu terminal:
nc -u 127.0.0.1 5004 <(awk -f rules.awk <(tail -F logfile.log))
Isso resultou no seguinte erro:
Invalid port specification: /dev/fd/63
Parece que o redirecionamento realmente passou o dispositivo lógico do fluxo em vez de seu "valor", mas estou apenas adivinhando novamente.
Poderia alguém com um pouco mais de BASH me apontar na direção certa com isso?