mkvirtualenv的mac shell脚本问题

时间:2013-09-05 03:29:08

标签: python bash shell

我正在创建一个shell脚本来创建一个新的python虚拟环境,激活它,安装django和其他应用程序。我遇到了运行workon命令的问题。有什么想法吗?

   1 #!/bin/bash
   2 export WORKON_HOME=$HOME/Development/Python/Django/.virtualenvs
   3 export PROJECT_HOME=$HOME/Development/Python/Django/dev
   4 source /usr/local/bin/virtualenvwrapper.sh
   5 
   6 ENV_NAME="$1"
   7 
   8 #Create the virtual environment
   9 mkvirtualenv $ENV_NAME --no-site-packages
  10 
  11 #workon the newly created environment
  12 workon $ENV_NAME
  13 
  14 #install django
  15 #pip install django
  16 
  17 #install apps
  18 #pip install south
  19 #pip install fabric
  20 #pip install django-debug-toolbar
  21 #pip install django-extensions
  22 #pip install compressor
  23 
  24 exit
  25 

脚本退出后,环境未激活。

我尝试添加第2行和第3行,但这没有帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

正常执行脚本时,它会在子shell中执行。这个脚本的作用是正确设置子shell的环境......然后退出,使你的 shell的环境保持不变。 export与此无关,它将环境的这些部分传递给子进程,而不是父进程。

为了使其正常工作,您必须source脚本,(或使用.命令,这是源的同义词)。这使得当前shell运行脚本,而不是将其委托给子shell。

我倾向于建议删除或更改需要使用#!运行的脚本的shebang(source)行 - 正常的shebang表示它是正常的脚本并且可以正常运行,这完全是误导。我个人的偏好是将其改为:

#!/bin/echo please run this with the source command

...如果有人试图像普通脚本一样运行它,它会告诉他们如何正确运行它。

或者你可以删除执行权限并完成调用。