我有以下 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
“浏览器”命令等来关闭。