Saya mencoba menulis (apa yang saya pikir akan menjadi) skrip bash sederhana yang akan:
- jalankan virtualenv untuk membuat lingkungan baru dengan $ 1
- aktifkan lingkungan virtual
- lakukan beberapa hal lagi (instal django, tambahkan django-admin.py ke jalur virtualenv, dll.)
Langkah 1 bekerja dengan sangat baik, tapi sepertinya saya tidak bisa mengaktifkan virtualenv. Bagi mereka yang tidak terbiasa dengan virtualenv, itu menciptakan activate
file yang mengaktifkan lingkungan virtual. Dari CLI, Anda menjalankannya menggunakansource
source $env_name/bin/activate
Di mana $ env_name, jelas, adalah nama dir yang menginstal virtual env.
Di skrip saya, setelah membuat lingkungan virtual, saya menyimpan path ke skrip aktifkan seperti ini:
activate="`pwd`/$ENV_NAME/bin/activate"
Tetapi ketika saya menelepon source "$activate"
, saya mendapatkan ini:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Saya tahu itu $activate
berisi jalur yang benar untuk mengaktifkan skrip, bahkan saya bahkan menguji apakah ada file sebelum saya panggil source
. Tapi source
itu sendiri sepertinya tidak dapat menemukannya. Saya juga mencoba menjalankan semua langkah secara manual di CLI, di mana semuanya berfungsi dengan baik.
Dalam penelitian saya, saya menemukan skrip ini , yang mirip dengan apa yang saya inginkan tetapi juga melakukan banyak hal lain yang tidak saya butuhkan, seperti menyimpan semua lingkungan virtual dalam direktori ~ / .virtualenv (atau apa pun yang ada di dalam $ WORKON_HOME). Tapi menurut saya dia menciptakan jalan menuju activate
, dan memanggil source "$activate"
saya dengan cara yang sama.
Ini adalah keseluruhan skripnya:
#!/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
PENOLAKAN: Script bash-fu saya cukup lemah. Saya cukup nyaman di CLI, tetapi mungkin ada beberapa alasan yang sangat bodoh karena ini tidak berfungsi.
sumber
Dalam standar POSIX, yang
/bin/sh
seharusnya dihormati, perintahnya adalah.
(satu titik), bukansource
. Thesource
perintah adalahcsh
-ism yang telah ditarik kebash
.Mencoba
Atau jika Anda harus memiliki
bash
-isme non-POSIX dalam kode Anda, gunakan#!/bin/bash
.sumber
source
adalah sinonim untuk.
./bin/sh -c '/path/to/script.sh'
,. Meskipun skrip saya adalah skrip bash, sumber gagal mendapatkan sumber ekspor. Tapi "." bekerja!Di Ubuntu jika Anda menjalankan skrip dengan
sh scriptname.sh
Anda mendapatkan masalah ini.Coba jalankan skrip dengan
./scriptname.sh
gantinya.sumber
chmod +x filename.sh