A razão pela qual o LED pisca apenas uma vez é que, quando você imprime em um tubo, o tubo permanece aberto, portanto, há apenas uma invocação de blink_led
. Se blink_led
leu seu stdin para instruções, isso não seria um problema. Se falhar ao ler stdin e sair, então awk
irá sair também.
A maneira convencional em torno disso é close()
o pipe, então a próxima invocação começa com uma nova:
tcpdump -Alq port 1700 | awk '
BEGIN { mypipe="/path/to/blink_led 18"; }
/rxpk/ { print | mypipe; close(mypipe); }'
system()
é bom também, como sugerido por @heemayl (e provavelmente melhor se blink_led
não tiver interesse em ler stdin).
Você perceberá que estou usando -l
em vez de -U
, -l
libera stdout para evitar pausas se a saída desejada estiver aguardando em um buffer stdio ( -U
ativa a limpeza de pacotes inteiros quando você usa -w
para gravar em um arquivo).