Obtener un error 'fuente: no encontrado' cuando se usa la fuente en un script bash
Estoy tratando de escribir (lo que pensé que sería) un script de bash simple que:
run virtualenv para crear un nuevo entorno a $ 1activar el entorno virtualhaga algunas cosas más (instale django, agregue django-admin.py a la ruta del virtualenv, etc.) Paso 1 funciona bastante bien, pero parece que no puedo activar virtualenv. Para aquellos que no están familiarizados con virtualenv, crea unaactivate
archivo que activa el entorno virtual. Desde la CLI, lo ejecutas usandosource
source $env_name/bin/activate
Where $ env_name, obviamente, es el nombre del directorio en el que está instalado el env virtual.
En mi script, después de crear el entorno virtual, almaceno la ruta al script de activación de esta manera:
activate="`pwd`/$ENV_NAME/bin/activate"
Pero cuando llamo asource "$activate"
, Entiendo esto
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Yo sé eso$activate
contiene la ruta correcta al script de activación, de hecho, incluso pruebo que hay un archivo antes de llamar asource
. Perosource
parece que no puede encontrarlo. También he intentado ejecutar todos los pasos manualmente en la CLI, donde todo funciona bien.
En mi investigación encontréeste script, que es similar a lo que quiero pero también está haciendo muchas otras cosas que no necesito, como almacenar todos los entornos virtuales en un directorio ~ / .virtualenv (o lo que sea que esté en $ WORKON_HOME). Pero me parece que está creando el camino haciaactivate
, y llamando asource "$activate"
básicamente de la misma manera que yo.
Aquí está el guión en su totalidad:
#!/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: Mi bash script-fu es bastante débil. Me siento bastante cómodo en la CLI, pero puede haber alguna razón extremadamente estúpida por la que esto no funciona.