
次のようなコマンドがあります
イベント
または
tcpdump -n 送信元ホスト xxxx
何かが起こったときに標準出力にいくつかの行を送信します。行が印刷された直後に何らかのコマンドを実行する方法はありますか。例:
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)