2011-08-03 60 views
7

我想寫什麼應該是一個超級簡單的bash腳本。基本上激活一個虛擬的env,並改變到工作目錄。我做了很多事情,並且對一個命令採取了正確的態度。虛擬環境從bash腳本初始化

基本上...

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

然而,當運行時,它只是轉儲回外殼和我仍然在我跑的腳本從目錄和環境沒有被激活。

回答

20

您只需使用source命令運行腳本。這是因爲cd命令對運行它的shell是本地的。當您直接運行腳本時,將執行一個新的shell,該腳本在到達腳本的文件末尾時終止。通過使用source命令,你可以讓shell直接執行腳本的指令。

+0

其中,順便說一句,這就是爲什麼你正在使用的「源」,在您自己的腳本的原因。 –

+0

正是我需要的。一旦定時器死亡,將其標記爲正確。 – Ominus

1

cd的值是當前腳本的本地值,當您脫離文件末尾時會結束。

你想要做的不是「超級簡單」,因爲你想覆蓋這種行爲。

查看exec用您選擇的過程替換當前過程。

要將命令送入交互式Bash,請查看--rcfile選項。

1

我想你希望你的腳本是動態的,但是,作爲一個快速修復時,我在一個新的系統上創建一個別名。

開始即

將env被稱爲位於〜/ ENVS/PY1 /與存儲庫 位置 'PY1' 在〜/凸出/ PY1/

別名PY1 ='源〜/ ENVS/PY1/bin中/激活; cd〜/ proj/py1 /;

末即

您現在可以從任何地方CLI鍵入PY1訪問項目和的virtualenv。

我知道這不是近乎理想的地方,違反了DRY和許多其他編程概念。這只是一種快速而骯髒的方式,讓您的環境和項目可以快速訪問,而無需設置變量。