J'essaie d'écrire (ce que je pensais être) un simple script bash qui:
- exécutez virtualenv pour créer un nouvel environnement à 1 $
- activer l'environnement virtuel
- faire encore plus de choses (installer django, ajouter django-admin.py au chemin de virtualenv, etc.)
L'étape 1 fonctionne assez bien, mais je n'arrive pas à activer virtualenv. Pour ceux qui ne sont pas familiers avec virtualenv, il crée un activate
fichier qui active l'environnement virtuel. À partir de la CLI, vous l'exécutez en utilisantsource
source $env_name/bin/activate
Où $ env_name, évidemment, est le nom du répertoire dans lequel l'environnement virtuel est installé.
Dans mon script, après avoir créé l'environnement virtuel, je stocke le chemin vers le script d'activation comme ceci:
activate="`pwd`/$ENV_NAME/bin/activate"
Mais quand j'appelle source "$activate"
, j'obtiens ceci:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Je sais que $activate
contient le chemin correct vers le script d'activation, en fait je teste même qu'un fichier est là avant d'appeler source
. Mais source
lui-même ne semble pas pouvoir le trouver. J'ai également essayé d'exécuter toutes les étapes manuellement dans la CLI, où tout fonctionne bien.
Dans mes recherches, j'ai trouvé ce script , qui est similaire à ce que je veux mais qui fait aussi beaucoup d'autres choses dont je n'ai pas besoin, comme stocker tous les environnements virtuels dans un répertoire ~ / .virtualenv (ou tout ce qui se trouve dans $ WORKON_HOME). Mais il me semble qu'il crée le chemin vers activate
et appelle source "$activate"
essentiellement de la même manière que moi.
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
AVIS DE NON-RESPONSABILITÉ: Mon script-fu bash est assez faible. Je suis assez à l'aise avec la CLI, mais il peut bien y avoir une raison extrêmement stupide que cela ne fonctionne pas.
la source
Dans le standard POSIX, qui
/bin/sh
est censé respecter, la commande est.
(un seul point), nonsource
. Lasource
commande est uncsh
-ism qui a été intégrébash
.Essayer
Ou si vous devez avoir des
bash
-ismes non-POSIX dans votre code, utilisez#!/bin/bash
.la source
source
est synonyme de.
./bin/sh -c '/path/to/script.sh'
. Même si mon script était un script bash, la source n'a pas réussi à générer les exportations. Mais "." travaillé!Dans Ubuntu, si vous exécutez le script avec,
sh scriptname.sh
vous rencontrez ce problème.Essayez
./scriptname.sh
plutôt d' exécuter le script avec .la source
chmod +x filename.sh