2012-05-18 54 views
0

一個巖組功能,我想編寫一個巖組的功能,看起來像:編寫可自動對文件重新運行一個命令保存

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 
}  

此解決方案相當緩慢,不是很優雅。任何人都知道一種更高效或至少更清潔的方法嗎?

+0

inotifywait將完成對任何事件的發生。您可能需要指定「-e modify -e move_self -e delete_self」以防止任何進程讀取該文件時重新啓動守護進程。 –

回答

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

相關問題