Я пытаюсь написать (то, что я думал, что будет) простой Баш скрипт, который будет:Получение «источник: не найден» ошибка при использовании источника в Баш скрипт
- запустить virtualenv создать новая среда в $ 1
- активировать виртуальную среду
- сделать некоторые вещи (установить Джанго, добавьте django-admin.py в пути в virtualenv в и т.д.)
Шаг 1 работает достаточно хорошо, но я не может активировать virtualenv. Для тех, кто не знаком с virtualenv, он создает файл activate
, который активирует виртуальную среду. Из CLI, вы запустите его с помощью source
source $env_name/bin/activate
Где $ env_name, очевидно, является имя директории, которая устанавливается виртуальный окр в.
В моем сценарии, после создания виртуальной среды, Я храню путь к сценарию АКТИВИРУЙТЕ так:
activate="`pwd`/$ENV_NAME/bin/activate"
Но когда я называю source "$activate"
, я получаю это:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Я знаю, что $activate
содержит правильный путь к скрипту активации, на самом деле я даже проверяю, что файл есть до того, как я позвоню source
. Но source
сам по себе не может его найти. Я также попытался выполнить все шаги вручную в CLI, где все работает нормально.
В моем исследовании я нашел this script, который похож на то, что я хочу, но также выполняет множество других вещей, которые мне не нужны, например, хранение всех виртуальных сред в каталоге ~/.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
ОТКАЗ: Мой Баш скрипт-фу довольно слаб. Я довольно удобен в CLI, но вполне может быть какая-то крайне глупая причина, по которой это не работает.
Это решение было изначально комментарий в ответе Нормана Рэмси. Поскольку это то, что на самом деле фиксировало проблему, я изменил это как «принятый ответ». –
Правильный ответ - это не оружие Рамси. – Enzo