如何在特定的创建文件上用`inotifywait`替换`until .. sleep`?

时间:2012-08-06 11:19:14

标签: linux shell inotify

我有这样的代码来触发/etc/inittab中的脚本:

until test -p /tmp/updates.pipe
do
    sleep 0.25
done

使用sleep进行调试时,自set -x泛洪调试日志以来我想重构哪些内容。

IIUC inotifywait只在目录上观看。

inotifywait -e create /tmp

那么如何才能在看到 /tmp/updates.pipe 文件的CREATE事件后继续进行,而不是/tmp中的任何其他文件?

2 个答案:

答案 0 :(得分:1)

grep的安静标志会导致它在看到匹配后立即爆发。以下内容应在bash下运行。

grep -q updates.pipe<(inotifywait -e create -m / tmp)

答案 1 :(得分:0)

这样的事情怎么样:

while read OUTPUT
do
    if echo $OUTPUT | grep -q "CREATE updates.pipe"; then break; fi
done < <(inotifywait -qm -e create /tmp)

但这并不适用于所有shell。

这是另一个应该适用于所有shell的解决方案:

inotifywait -qm -e create /tmp | while read OUTPUT
do
    if echo $OUTPUT | grep -q "CREATE updates.pipe"; then break; fi
done

但出于一些神秘的原因,它只会在CREATE updates.pipe后的下一个输出之后中断,有人知道为什么吗?