为什么 inotifywait 会在任何事件之后退出,而不仅仅是它“监视”的事件之后退出?

为什么 inotifywait 会在任何事件之后退出,而不仅仅是它“监视”的事件之后退出?

例如...

inotifywait --event modify ./my-file | doSomething

...将等待,直到发生任何事件my-file,此时它将退出。如果事件不是事件modify,则没有输出,退出代码为零。

这非常令人困惑,导致我们需要添加一个循环:

while true; do
    local eventInfo=$(inotifywait --event modify ./my-file)

    if [[ "${eventInfo}" != '' ]]; then
       doSomething ${eventInfo}
       break
    fi

    # if we get here, then some other event we don't care about happened -- why??
done

这似乎有悖常理——为什么会这样,有没有任何文件表明当发生非监视事件时--event标志不会停止退出?inotifywait


再生产

在终端 1 中,在编辑器中创建并打开一个测试文件 ( test)。

在终端 2 中运行:

inotifywait -q --event modify ./test | cat

在终端 1 中,修改并保存文件。注意终端 2 输出./test MODIFYand exist -- good。

在终端 2 中再次运行相同的命令。

在终端 1 中,退出编辑器并删除文件 ( test)。

在终端 2 中,请注意inotifywait已退出,没有任何输出——它是由于DELETE未配置为“关心”的事件而退出的。

相关内容