0

次のような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
}    

このソリューションはかなり遅く、あまりエレガントではありません。これをより効率的にする方法、または少なくともよりクリーンにする方法を知っている人はいますか?

4

1 に答える 1

1

少しいじった後、これが私が最終的に得たものです:

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

于 2012-05-20T03:28:33.687 に答える