Redirecionamento aninhado no BASH

2

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

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 fornecidos na chamada inicial e rules.awk simplesmente contém alguns padrões desejados para combinar.

Chamar o script com ./script logfile.log parece não fazer nada e o script é interrompido. 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, 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?

    
por Troy Patrick 17.10.2012 / 03:35

2 respostas

1

Os descritores de arquivos são um pouco confusos, eles certamente são mais confusos do que os pipes. Portanto, antes de tentar redirecionar a saída de um subshell ( < () ) como entrada padrão para um comando, tente obter o que você deseja com pipes. Além disso, pode ajudar a obter os comandos de saída funcionando corretamente antes de enviar a entrada para um comando de destino (nc).

cat <(tail -F /var/log/daemon.log ) | cat -n | awk 'NR>3 { print}'

isto é equivalente a

tail -F /var/log/daemon.log | cat -n | awk 'NR>3 {print}';

mas "melhor", uma vez que não se baseia na sintaxe específica do bash '< ()'

    
por 17.10.2012 / 04:20
0

De improviso, isso parece que deveria funcionar para mim

tail -F $@ | awk -f rules.awk | nc -u 127.0.0.1 5004
    
por 17.10.2012 / 04:05