Tôi đang cố gắng viết (những gì tôi nghĩ sẽ là) một tập lệnh bash đơn giản sẽ:
- chạy virtualenv để tạo môi trường mới với $ 1
- kích hoạt môi trường ảo
- làm thêm một số thứ (cài đặt django, thêm django-admin.py vào đường dẫn của virtualenv, v.v.)
Bước 1 hoạt động khá tốt, nhưng dường như tôi không thể kích hoạt virtualenv. Đối với những người không quen thuộc với virtualenv, nó tạo ra một activate
tệp kích hoạt môi trường ảo. Từ CLI, bạn chạy nó bằngsource
source $env_name/bin/activate
Rõ ràng trong đó $ env_name là tên của thư mục mà env ảo được cài đặt.
Trong tập lệnh của tôi, sau khi tạo môi trường ảo, tôi lưu trữ đường dẫn đến tập lệnh kích hoạt như thế này:
activate="`pwd`/$ENV_NAME/bin/activate"
Nhưng khi tôi gọi source "$activate"
, tôi nhận được điều này:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Tôi biết rằng $activate
có chứa đường dẫn chính xác đến tập lệnh kích hoạt, trên thực tế tôi thậm chí còn kiểm tra rằng một tập tin có ở đó trước khi tôi gọi source
. Nhưng source
chính nó dường như không thể tìm thấy nó. Tôi cũng đã thử chạy tất cả các bước theo cách thủ công trong CLI, nơi mọi thứ đều hoạt động tốt.
Trong nghiên cứu của tôi, tôi đã tìm thấy tập lệnh này , tương tự như những gì tôi muốn nhưng cũng đang làm rất nhiều thứ khác mà tôi không cần, như lưu trữ tất cả các môi trường ảo trong thư mục ~ / .virtualenv (hoặc bất cứ thứ gì có trong $ WORKON_HOME). Nhưng dường như với tôi rằng anh ta đang tạo ra con đường activate
và gọi source "$activate"
về cơ bản giống như tôi.
Đây là toàn bộ kịch bản:
#!/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
TUYÊN BỐ TỪ CHỐI: Bash script-fu của tôi khá yếu. Tôi khá thoải mái tại CLI, nhưng có thể có một số lý do cực kỳ ngu ngốc, điều này không hiệu quả.