Executando comandos após saídas baseadas em eventos

Executando comandos após saídas baseadas em eventos

existem comandos como

euwevent

ou

tcpdump -n src host xxxx

que enviam para o stdout algumas linhas quando algo acontece. Existe alguma forma de executar algum comando imediatamente após a impressão de uma linha. Ex:

iwevent | echo "Wireless event happened"

Responder1

Basta ler stdin em um loop

iwevent | while IFS= read -r line; do
    echo "[$(date "+%F %T")] - $line"
done

Dependendo do que você faz no corpo do loop, você pode querer

while IFS= read -r line; do
    echo "[$(date "+%F %T")] - $line"
done < <(iwevent)

Isso evita os efeitos implícitos do subshell do uso de um pipeline.

Responder2

Não tenho certeza se entendi o que você quer dizer, mas algo nesse sentido?

while IFS= read -r line; do
    printf "%s\n%s\n" "$line" "Yohooo! One more package."
done < <(tcpdump -i any -nS)

informação relacionada