inotify脚本运行两次?

时间:2016-12-08 13:28:54

标签: inotify inotifywait inotify-tools

我在CentOS 7上使用inotify-toolsinotifywait)在每个文件创建时执行php脚本。

当我运行以下脚本时:

#!/bin/sh
MONITORDIR="/path/to/some/dir"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
    php /path/to/myscript.php ${NEWFILE}
done

我可以看到有两个过程:

# ps -x | grep mybash.sh
    27723 pts/4    S+     0:00 /bin/sh /path/to/mybash.sh
    27725 pts/4    S+     0:00 /bin/sh /path/to/mybash.sh
    28031 pts/3    S+     0:00 grep --color=auto mybash.sh

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:0)

管道分裂为多个进程。因此,您拥有父脚本以及运行while read循环的单独子shell。

如果您不想要,请使用bash或ksh中提供的流程替换语法(请注意下面的shebang不再是#!/bin/sh):

#!/bin/bash
monitordir=/path/to/some/dir

while read -r newfile; do
    php /path/to/myscript.php "$newfile"
done < <(inotifywait -m -r -e create --format '%w%f' "$monitordir")