我想要某种方法来获取流程的输出并将其拆分成批。例如,就我而言,我想从文件中获取日志,并在每次有条目时向我发送电子邮件。
像这样:
tail -f /var/log/server.log | segment --delay=5 --command="sendmail [email protected]"
上述命令将等待 5 秒不活动,然后使用迄今为止的输出调用指定的命令。
有这样的事吗?
答案1
使用 bash,你可以执行以下操作:
segment () {
while true
do
read -t "$TMOUT" # read input with a timeout of $TMOUT seconds
printf -v output "%s\n" "$output" "$REPLY" # append to already read output
if (( $? == 0 ))
then
# timeout not exceeded, so we can continue reading
continue
fi
# some error occurred, run specified command with existing output
printf "%s\n" "$output" | "$@"
if (( $? > 128 ))
# timeout exceeded, so we discard mailed output and continue
output=""
else
# some other error, end loop
return
fi
done
}
你可以像这样使用它:
tail -f /var/log/server.log | TMOUT=5 segment sendmail [email protected]