Файл должен быть исполняемым:

аюсь написать (как я думал, будет) простой скрипт bash, который будет:

запустить virtualenv, чтобы создать новую среду за 1 долларактивировать виртуальную средусделать еще кое-что (установить django, добавить django-admin.py к пути в virtualenv и т. д.)

Шаг 1 работает довольно хорошо, но я не могу активировать virtualenv. Для тех, кто не знаком с virtualenv, он создаетactivate файл, который активирует виртуальную среду. Из CLI вы запускаете его с помощьюsource

source $env_name/bin/activate

Где $ env_name, очевидно, является именем каталога, в котором установлен виртуальный env.

В моем сценарии после создания виртуальной среды я сохраняю путь к сценарию активации следующим образом:

activate="`pwd`/$ENV_NAME/bin/activate"

Но когда я звонюsource "$activate"Я получаю это:

/home/clawlor/bin/scripts/djangoenv: 20: source: not found

я знаю это$activate содержит правильный путь к скрипту активации, на самом деле я даже проверяю, есть ли файл перед вызовомsource, Ноsource сам не могу найти его. Я также попытался выполнить все шаги вручную в CLI, где все работает нормально.

В моем исследовании я нашелэтот скрипт, что похоже на то, что я хочу, но также делает много других вещей, которые мне не нужны, например, хранение всех виртуальных сред в каталоге ~ / .virtualenv (или в любом другом месте в $ WORKON_HOME). Но мне кажется, что он создает путь кactivateи зоветsource "$activate" в основном так же, как я.

Вот сценарий целиком:

#!/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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мой сценарий bash довольно слаб. Мне довольно удобно в CLI, но вполне может быть какая-то чрезвычайно глупая причина, по которой это не работает.

Ответы на вопрос(3)

Ваш ответ на вопрос