Je suis en train d'écrire (ce que je pensais être) un simple script bash qui:Obtenir une 'source: not found' erreur lors de l'utilisation source dans un script bash
- run virtualenv pour créer un nouvel environnement à 1
- $ activer l'environnement virtuel
- faire un peu plus de choses (installer django, ajouter django-admin.py au chemin du virtualenv, etc.)
Étape 1 fonctionne très bien, mais je ne peut pas sembler activer le virtualenv. Pour ceux qui ne connaissent pas virtualenv, il crée un fichier activate
qui active l'environnement virtuel. A partir de la CLI, vous exécutez à l'aide source
source $env_name/bin/activate
Où env_name de $, de toute évidence, est le nom du répertoire que le env virtuel est installé.
Dans mon script, après avoir créé l'environnement virtuel, Je stocke le chemin du script activate comme ceci:
activate="`pwd`/$ENV_NAME/bin/activate"
Mais quand je l'appelle source "$activate"
, je reçois ceci:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Je sais que $activate
contient le bon chemin vers le script d'activation, en fait je vérifie même qu'un fichier est là avant que j'appelle source
. Mais source
lui-même ne peut pas sembler le trouver. J'ai également essayé d'exécuter toutes les étapes manuellement dans la CLI, où tout fonctionne bien.
Dans ma recherche, j'ai trouvé this script, ce qui est similaire à ce que je veux mais fait aussi beaucoup d'autres choses dont je n'ai pas besoin, comme le stockage de tous les environnements virtuels dans un répertoire ~/.virtualenv (ou tout ce qui est dans $ WORKON_HOME). Mais il me semble qu'il crée le chemin vers activate
, et appelle source "$activate"
de la même manière que je suis.
Voici le script dans son intégralité:
#!/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: Mon script-fu de bash est assez faible. Je suis assez à l'aise à la CLI, mais il peut y avoir une raison extrêmement stupide que cela ne fonctionne pas.
Cette solution était à l'origine un commentaire dans la réponse de Norman Ramsey. Puisque c'est ce qui a réellement réglé le problème, j'ai changé cela pour être la 'réponse acceptée' –
La bonne réponse est Ramsey n'est pas des canons. – Enzo