Linux 如何每秒从缓冲区读取数据?

Linux 如何每秒从缓冲区读取数据?,linux,bash,shell,Linux,Bash,Shell,我正在编写脚本,一旦我更改了代码,它将重新加载我的应用程序 到目前为止,我有一部分将提供服务的名称,这些更改来自: inotifywait $ENVPATH --recursive --monitor --event CREATE --event MODIFY --event DELETE | grep --line-buffered -Eiv ".idea|.phpstorm.meta.php|runtime|.swp|.log" 但是当我编写代码时,我不希望一秒钟内发生多个触发重新加

我正在编写脚本,一旦我更改了代码,它将重新加载我的应用程序

到目前为止,我有一部分将提供服务的名称,这些更改来自:

inotifywait $ENVPATH --recursive --monitor --event CREATE --event MODIFY  --event DELETE | grep --line-buffered -Eiv ".idea|.phpstorm.meta.php|runtime|.swp|.log"  
但是当我编写代码时,我不希望一秒钟内发生多个触发重新加载事件,所以我需要缓冲这个流。我想每x秒阅读一次所有可用的数据

到目前为止,我只知道这种读取数据的方法,但它不适合我的需要

while read line
do
  echo "$line"
done 

read-t0
将检查是否有可用的输入,而不实际读取它。您可以使用它来检查是否存在任何应该忽略的缓冲事件

inotifywait -rm -e CREATE -e MODIFY -e DELETE "$ENVPATH" \
    --exclude '\.idea$|\.phpstorm.meta.php$|runtime|\.swp$|\.log$' |
    # Block until there's an event.
    while read -r dir event path; do
        # Discard all remaining events.
        while read -t 0; do read -r dir event path; done
    done

请注意,您可以使用
--exclude
直接从inotifywait中筛选出文件。

您可以在指定的时间内主动忽略
inotifywait
输出的所有内容

inotifywait ... |
while read line
do
     echo "$line"
     # ignore input for 1 second
     timeout 1 cat >/dev/null
done 

我认为你必须以一种更合理的方式来处理inotifywait。。。只等待相关事件,并限制在某个变量(数组?)中,在执行这些事件之前要做什么。