Tôi đang cố gắng để viết (những gì tôi nghĩ rằng sẽ là) một kịch bản bash đơn giản mà sẽ:Bắt một 'nguồn: không tìm thấy' lỗi khi sử dụng nguồn trong một kịch bản bash
- chạy virtualenv để tạo ra một môi trường mới tại $ 1
- kích hoạt môi trường ảo
- làm một số công cụ hơn (cài đặt django, thêm django-admin.py đến con đường của virtualenv vv)
Bước 1 hoạt động khá tốt, nhưng tôi dường như 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 tệp activate
kích hoạt môi trường ảo. Từ CLI, bạn chạy nó bằng cách sử source
source $env_name/bin/activate
đâu $ env_name, rõ ràng, là tên của thư mục mà env ảo được cài đặt trong.
Trong kịch bản của tôi, sau khi tạo môi trường ảo, tôi lưu trữ đường dẫn đến kịch bản 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 có được điều này:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Tôi biết rằng $activate
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 xem tệp có ở đó trước khi tôi gọi source
hay không. 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 thủ công trong CLI, nơi mọi thứ hoạt động tốt.
Trong nghiên cứu của mình, tôi tìm thấy this script, tương tự như những gì tôi muốn nhưng cũng đang thực hiện 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ì trong $ WORKON_HOME). Nhưng có vẻ như với tôi rằng anh ấy đang tạo đường dẫn đến activate
và gọi số source "$activate"
về cơ bản giống như tôi.
Đây là kịch bản trong toàn bộ của 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
SỰ TỪ BỎ: bash My script-fu là khá yếu. Tôi khá thoải mái ở CLI, nhưng cũng có thể có một số lý do cực kỳ ngu ngốc mà nó không hoạt động.
Giải pháp này ban đầu là một bình luận trong câu trả lời của Norman Ramsey. Vì đây là những gì thực sự cố định vấn đề, tôi đã thay đổi điều này thành 'câu trả lời được chấp nhận' –
Câu trả lời đúng là súng không phải của Ramsey '. – Enzo