0

我正在创建一个 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 行,但没有帮助。有任何想法吗?

4

1 回答 1

1

当您正常执行脚本时,它会在子shell 中执行。该脚本所做的是正确设置该子外壳的环境......然后退出,使您的外壳环境保持不变。export在这里不相关,它将环境的这些部分传递给子进程,而不是父进程。

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

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

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

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

或者您可以删除执行权限并将其称为完成。

于 2013-09-05T04:28:21.353 回答