我在CentOS 7上使用inotify-tools(inotifywait
)在每个文件创建时执行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
为什么会这样,我该如何解决?
答案 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")