/srv/mutt
디렉토리에 있는 파일을 보기 위해 시스템 시작 시 실행되는 다음 bash 스크립트가 있습니다 . 잠시 동안은 완벽하게 작동하지만 도착하는 파일을 "보는" 것이 중지됩니다 /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