inotifywait 脚本 case 语句在一段时间后停止工作

inotifywait 脚本 case 语句在一段时间后停止工作

我有以下 bash 脚本,在系统启动时运行以查看放入/srv/mutt目录中的文件。它可以完美地工作一段时间,但随后就停止“看到”到达的文件/srv/mutt

我添加了 echo 语句来尝试诊断问题所在。这表明他们inotifywait看到了文件并报告了它们,/tmp/waitAndView.log但查看程序没有被调用。

出了什么问题?有人对原因或如何诊断问题有任何想法吗?它似乎''

#!/bin/bash
#
#
# script to detect new files in /srv/mutt and display them, run from 'Session & Startup'
#
cd /srv/mutt                    # where the files appear
shopt -s nocasematch            # ignore case in case (erk!)
#
#
# inotifywait will output the name of any file that is rsynced into /srv/mutt
#
inotifywait -m -q -e moved_to --format %f /srv/mutt/ | \
#
#
# Handle file as appropriate
#

while read -r file; do
    echo $file >>/tmp/waitAndView.log
    case $file in
        dbapost*)
            #
            #
            # run dbapost on the received message file
            #
            /home/chris/.cfg/bin/dbapost $file &
            ;;

        *.pdf)
            #
            #
            # View PDF file with atril
            #
            atril $file &
            ;;

        *.jpg|*.png|*.jpeg)
            #
            #
            # View other image formats with nomacs
            #
            nomacs $file &
            ;;

        *.html)
            #
            #
            # HTML file is an E-Mail to view with web browser
            #
            $HOME/bin/browser --new-tab file:///srv/mutt/$file &
            ;;

        *)
            ;;
    esac
    echo finished with $file >>/tmp/waitAndView.log
done

答案1

该语句中运行的程序之一case正在窃取输入。考虑这个例子:

seq 9 | 
while read f
do case $f in 
   4) cat -n & ;;
   *) echo got $f ;;
   esac
done

这可以是输出:

got 1
got 2
got 3
     1  6
     2  7
     3  8
     4  9
got 5

一旦启动,它就可以在成功cat之前读取管道。while read您需要关闭标准输入,通常通过添加</dev/null“浏览器”命令等来关闭。

相关内容