Obtendo um erro 'source: not found' ao usar o source em um script bash
Estou tentando escrever (o que eu pensava) um script simples do bash qu
run virtualenv para criar um novo ambiente a $ 1 ative o ambiente virtualais algumas coisas (instale o django, adicione django-admin.py no caminho do virtualenv, etc @Step 1 funciona muito bem, mas não consigo ativar o virtualenv. Para quem não conhece o virtualenv, ele cria umactivate
arquivo que ativa o ambiente virtual. Na CLI, você o 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, eu armazeno o caminho para o script de ativação assim:
activate="`pwd`/$ENV_NAME/bin/activate"
Mas quando ligo parasource "$activate"
, Eu entendi isso
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Eu sei disso$activate
contém o caminho correto para o script de ativação, na verdade eu até testei se um arquivo estava lá antes de ligar parasource
. Massource
em si não parece encontrá-lo. Também tentei executar todas as etapas manualmente na CLI, onde tudo funciona be
Na minha pesquisa eu encontreiEste script, que é semelhante ao que eu quero, mas também está fazendo muitas outras coisas que eu 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 paraactivate
e chamandosource "$activate"
basicamente da mesma maneira que eu sou.
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
DISCLAIMER: Meu script de fu do bash é bem fraco. Estou bastante à vontade na CLI, mas pode haver algum motivo extremamente estúpido para isso não estar funcionand