2015-05-14 115 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