2011-08-03 7 views
7

Süper basit bir bash komut dosyasının ne olması gerektiğini yazmaya çalışıyorum. Temel olarak sanal bir env'yi etkinleştirin ve çalışma dizinine geçin. Bir görev çok yaparım ve tek bir komuta tecavüz etmek anlamlıdır. Temelde VirtualEnv, bir bash betiğinden başlatıldı

...
#!/bin/bash 
source /usr/local/turbogears/pps_beta/bin/activate 
cd /usr/local/turbogears/pps_beta/src 

Ancak bu sadece kabuk geri döker ve ben komut dosyası koştu dizinde hala duyuyorum ve çevre etkin değil çalıştırdığında.

cevap

20

Yapmanız gereken tek şey, komut dosyanızı kaynak komutla çalıştırmaktır. Bunun nedeni, cd komutunun çalıştığı kabuk için yerel olmasıdır. Doğrudan bir komut dosyası çalıştırdığınızda, komut dosyasının dosya sonuna ulaştığında sonlanan yeni bir kabuk yürütülür. Kaynak komutunu kullanarak, komut dosyasının yönergelerini doğrudan yürütmesi için kabuğu anlatırsınız.

+0

Hangi arada, kendi komut "kaynak" kullanıyor nedeni budur. –

+0

Tam olarak neye ihtiyacım vardı. Zamanlayıcı öldüğü anda doğru olarak işaretleyecektir. – Ominus

1

cd değeri, dosyanın sonuna düşmek zaman biter akım komut, yerel olduğunu. Bu davranışı geçersiz istiyorum, çünkü yapmanız çalıştığımız şey

"süper basit" değildir. Seçtiğiniz süreci ile yerdeğiştirme işlemi için exec de

bak. interaktif Bash içine komutları beslemek için

, --rcfile seçenek bak.

1

Ben bir takma ad oluşturun yeni bir sistem üzerinde çalışırken hızlı bir düzeltme olarak, ancak, komut dinamik olmasını diliyorum düşünün.

env ~/proj/PY1/​​

takma PY1 = 'kaynağında bir depo konumu ile ~/ENV/PY1/​​bulunan 'PY1' olarak adlandırılır ~/yani başlar ENV/PY1/​​bin/aktif; cd ~/proj/pyl /;

uç yani

Artık her yerde CLI dan PY1 yazarak proje ve VIRTUALENV erişebilirler.

Bu, hiçbir yerde ideali yakın KURU ve diğer birçok programlama kavramlarını ihlal ettiğini biliyoruz. Değişkenleri ayarlamaya gerek kalmadan projenizi ve projenizi hızlıca almanın hızlı ve kirli bir yoludur.