我是
shell脚本的新手,但我想制作一个bash脚本,用于使用virtualenv激活/停用虚拟环境.
然后我想像Ubuntu中的服务一样使用这个脚本将其复制到/etc/init.d文件夹中.
然后我想像Ubuntu中的服务一样使用这个脚本将其复制到/etc/init.d文件夹中.
在我的脚本中,我有一个这样的变量:
VENV = /选择/ odoo / odoo_server / venv_oddo /箱
此变量表示虚拟环境中的bin路径.
在脚本中,我可以使用以下语句激活虚拟环境:
. ${} VENV /激活
这是可能的,因为activate是虚拟环境中bin目录内的文件.
但我不知道在我的脚本中使用的语句来停用我的虚拟环境.
我不能这样做:. ${} VENV /关闭
解决方法
制作这样有用的服务很难.
. ${VENV}/activate # note the dot
要么
source ${VENV}/activate
将source激活脚本,即运行其内容,就像它们是您获取它们的shell或脚本的一部分一样. virtualenvironment的激活is designed for this usage.相反,只是正常执行脚本
${VENV}/activate # note: NO dot and NO 'source' command
但是,您的服务脚本已经在自己的子shell中运行.因此,除了作为服务启动过程的一部分运行的任何python命令外,它不会产生任何影响.
从好的方面来说,你甚至不必关心去激活环境,除非你想在服务启动过程中运行更多的python东西,但是在你的virtualenv之外.