流程输出的分割方法

流程输出的分割方法

我想要某种方法来获取流程的输出并将其拆分成批。例如,就我而言,我想从文件中获取日志,并在每次有条目时向我发送电子邮件。

像这样:

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]

相关内容