Выполнение команд после событийных выходов

Выполнение команд после событийных выходов

есть такие команды как

iwevent

или

tcpdump -n src хост xxxx

которые отправляют на stdout некоторые строки, когда что-то происходит. Есть ли какая-либо форма запуска некоторой команды сразу после того, как строка напечатана. Пример:

iwevent | echo "Wireless event happened"

решение1

Просто прочитайте stdin в цикле

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

В зависимости от того, что вы делаете в теле цикла, вам может понадобиться

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

Это позволяет избежать неявных эффектов подоболочки, возникающих при использовании конвейера.

решение2

Не совсем понимаю, что вы имеете в виду, но что-то в этом роде?

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

Связанный контент