문제

다음과 같은 zsh 함수를 작성하고 싶습니다 :

smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]
.

WATCH_FILE가 저장되면 COMMAND_TO_RUN가 실행되고 smartwatch가 파일을 다시 저장할 때까지 기다릴 수 있습니다.이것은이 시나리오에서 저에게 도움이 될 것입니다 :

smartwatch server.py python server.py
.

서버 파일을 수정하면 서버가 다시 시작됩니다.나는 inotify-tools 가 도움이 될 수 있음을 들었습니다.그래서 저는 inotifywait를 사용하고 있지만 누군가가 더 나은 도구를 알고 있으면 알려주세요.지금까지 내가 가진 것 :

smartwatch() {                      
   WATCH=$1                         
   CMD=$2                           
   ARGS=$*[3,-1]                    
   $CMD $ARGS &!                    
   PID=$!                           
   inotifywait -qq $WATCH           
   kill $PID                        
   exec smartwatch $WATCH $CMD $ARGS
}    
.

이 해결책은 오히려 느리고 매우 우아하지 않습니다.누구 든지이 방법을보다 효율적으로 만들거나 최소한 청결하게 만들 수있는 방법을 알고 있습니까?

도움이 되었습니까?

해결책

일부 fiddling 이후, 내가 끝난 일은 다음과 같습니다.

onsave() {
   while true
   do
      eval "$1 &!"
      trap "kill $! &> /dev/null; return;" SIGINT SIGTERM
      inotifywait -e modify -qq $2
      kill $! &> /dev/null
   done
}
.

onsave "python server.py" server.py 를 실행할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top