2015-05-14 109 views
4

我正在寫一個'簡單'腳本來啓動django服務器,然後在我開發時啓動firefox。允許命令在bash腳本中使用django runserver命令後運行?

我已經看到了</dev/null &的技巧,並且可以在命令行上使用。但是當我在腳本中使用它時,它仍然會掛在服務器上。背景與ctrl-zbg命令僅背景腳本而不是命令。

有沒有一種方法,我可以通過django a'不要豬輸入'標誌?或者我可以在腳本內部以&結尾的方式來背景它?或者只是告訴腳本不要在單獨的會話中運行它?

這裏是我的腳本全(它的全硬核醜陋的,它可能會得到美化,如果我能得到這個工作):

SETTING_ENV=$1 
if [ "$PWD" = "/home/$USERNAME/PROJECT/" ]; then 
    pid=$(for pid in $(pidof -x "python"); do ps -p $pid -o pid,cmd --no-heading; done| grep [m]anage|head -1|cut -d" " -f2) 
    if [ -z $pid ]; then 
     python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null & 
    else 
     echo "Server still running on : $pid" 
    fi 
    pids=$(pidof -x firefox) 
    for pid in $pids; do 
     echo $pid 
     if [ -z $pid ]; then 
      echo "starting firefox" 
      firefox --new-window localhost:8000 & 
     else ecjp "Firefox already running on pid: $pid" 
     fi 
    done 
else 
    echo "$PWD is not /home/$USERNAME/PROJECT"; 
fi 
+0

@EricRenouf完成。 – Pureferret

+0

我可以只檢查這些更新是否來自具有類似問題的人員?這聽起來像應該有一個簡單的解決方案 - 沒有太多upvotes? – Pureferret

回答

1

你可以把你所有的命令在括號中是這樣的:

(python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null &) 

當您在圓括號之間運行命令時,它將創建一個新的子shell,因此當您退出shell時,該命令將繼續運行。

或者你也可以使用不認或nohup的:

python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null & 
disown 

-

nohup python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null & 
+0

我必須在工作中嘗試這個 – Pureferret

+0

這些(在本例中)都不會將控制權交還給腳本。我已經使用了你在其他地方提到過的所有三種方法,我知道它們通常是*工作。在'disown'的情況下,當我殺死'./manage runserver'的進程時輸出:'./start_gui.sh:line 21:4932終止的python ./manage.py runderver --settings = project.settings。$ SETTING_ENV Pureferret