我正在创建一个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行,但这没有帮助。有什么想法吗?
答案 0 :(得分:1)
正常执行脚本时,它会在子shell中执行。这个脚本的作用是正确设置子shell的环境......然后退出,使你的 shell的环境保持不变。 export
与此无关,它将环境的这些部分传递给子进程,而不是父进程。
为了使其正常工作,您必须source
脚本,(或使用.
命令,这是源的同义词)。这使得当前shell运行脚本,而不是将其委托给子shell。
我倾向于建议删除或更改需要使用#!
运行的脚本的shebang(source
)行 - 正常的shebang表示它是正常的脚本并且可以正常运行,这完全是误导。我个人的偏好是将其改为:
#!/bin/echo please run this with the source command
...如果有人试图像普通脚本一样运行它,它会告诉他们如何正确运行它。
或者你可以删除执行权限并完成调用。