Ausführen von Befehlen nach ereignisbasierten Ausgaben

Ausführen von Befehlen nach ereignisbasierten Ausgaben

Es gibt Befehle wie

iwevent

oder

tcpdump -n Quellhost xxxx

die bei einem Ereignis einige Zeilen an die Standardausgabe senden. Gibt es eine Möglichkeit, einen Befehl unmittelbar nach dem Drucken einer Zeile auszuführen? Beispiel:

iwevent | echo "Wireless event happened"

Antwort1

Lesen Sie einfach stdin in einer Schleife

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

Abhängig davon, was Sie im Schleifenkörper tun, möchten Sie vielleicht

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

Dadurch werden die impliziten Subshell-Effekte der Verwendung einer Pipeline vermieden.

Antwort2

Ich bin nicht sicher, was Sie meinen, aber etwas in diese Richtung?

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

verwandte Informationen