inotifywait 스크립트 케이스 문이 잠시 후 작동을 멈춥니다.

inotifywait 스크립트 케이스 문이 잠시 후 작동을 멈춥니다.

/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

관련 정보