Estou tentando escrever (o que pensei que seria) um script bash simples que:
- execute o virtualenv para criar um novo ambiente a US $ 1
- ativar o ambiente virtual
- faça mais algumas coisas (instale o django, adicione django-admin.py ao caminho do virtualenv, etc.)
O passo 1 funciona muito bem, mas não consigo ativar o virtualenv. Para quem não conhece o virtualenv, ele cria um activate
arquivo que ativa o ambiente virtual. Na CLI, você a executa usandosource
source $env_name/bin/activate
Onde $ env_name, obviamente, é o nome do diretório em que o ambiente virtual está instalado.
No meu script, depois de criar o ambiente virtual, armazeno o caminho para o script de ativação como este:
activate="`pwd`/$ENV_NAME/bin/activate"
Mas quando ligo source "$activate"
, recebo o seguinte:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Eu sei que $activate
contém o caminho correto para o script de ativação, na verdade eu até testei que um arquivo existe antes de ligar source
. Mas source
ele próprio parece não conseguir encontrá-lo. Eu também tentei executar todas as etapas manualmente na CLI, onde tudo funciona bem.
Na minha pesquisa, encontrei esse script , que é semelhante ao que eu quero, mas também está fazendo muitas outras coisas que não preciso, como armazenar todos os ambientes virtuais em um diretório ~ / .virtualenv (ou o que estiver em $ WORKON_HOME). Mas parece-me que ele está criando o caminho activate
e chamando source "$activate"
basicamente da mesma maneira que eu.
Aqui está o script em sua totalidade:
#!/bin/sh
PYTHON_PATH=~/bin/python-2.6.1/bin/python
if [ $# = 1 ]
then
ENV_NAME="$1"
virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
activate="`pwd`/$ENV_NAME/bin/activate"
if [ ! -f "$activate" ]
then
echo "ERROR: activate not found at $activate"
return 1
fi
source "$activate"
else
echo 'Usage: djangoenv ENV_NAME'
fi
AVISO LEGAL: Meu script de bash-fu é bem fraco. Estou bastante confortável com a CLI, mas pode haver alguma razão extremamente estúpida para isso não estar funcionando.