2013-01-22 53 views
3

這是一個.bashrc問題。 我想在.rvmrc這樣的特定目錄下爲.bashrc設置"export FOO=bar"在特定目錄中設置環境變量

我在下面試過。

$ touch ~/foo/.bashrc 
$ echo 'export RAILS_ENV=development' >> ~/foo/.bashrc 
$ cd foo/ 
$ env|grep RAILS_ENV 

但是在這種情況下RAILS_ENV應該什麼都不設置。

如果我設置爲.rvmrc而不是.bashrc,它會通過!但是,這是更好的方法,因爲我不需要安裝rvm環境,因此可以設置爲.bashrc

任何解決方案?

回答

7
在你的.bashrc

設置此:

PROMPT_COMMAND='[[ $PWD == "/foo/bar/" ]] && export FOO=BAR || unset FOO' 

的PROMPT_COMMAND變量的內容將每次你的提示改寫時間(它實際上是寫之前)以上檢查的$ PWD變量的命令(持有執行你的shell的當前工作目錄)「/ foo/bar」,如果它匹配的話,它會導出你的變量,如果它沒有,那麼這個變量就不會被設置。

EG

[email protected]$ PROMPT_COMMAND='[[ $PWD == "/home/peteches/test" ]] && export FOO=BAR || unset FOO' 
[email protected]$ pwd 
/home/peteches 
[email protected]$ cd test 
[email protected]$ pwd 
/home/peteches/test 
[email protected]$ env | grep FOO 
6:FOO=BAR 
73:PROMPT_COMMAND=[[ $PWD == "/home/peteches/test" ]] && export FOO=BAR || unset FOO 
[email protected]$ cd ../ 
[email protected]$ pwd 
/home/peteches 
[email protected]$ env | grep FOO 
72:PROMPT_COMMAND=[[ $PWD == "/home/peteches/test" ]] && export FOO=BAR || unset FOO 
[email protected]$ 
+0

酷!這就是我要的! – gipcompany

+0

@ gipcompany,如果這是您的問題的正確答案,請通過接受答案來回答答案:單擊答案旁邊的複選標記。 –

+0

我想將這個答案與下面的mycd()答案結合起來,以便設置具有不同env變量的多個目錄(並遠離單線程語法)。是否可以將一個像Davide的mycd()這樣的函數分配給PROMPT_COMMAND? – Brian

3

首先,AFAIK,bash不會在任何其他目錄中搜索.bashrc文件,但您的家庭 - 至少不是默認的。

其次,在寫入新條目到您的.bashrc之後,您應該將文件source .bashrc,以便修改發生。

+1

感謝您的解釋,.bashrc不能在'cd foo'的情況下自動加載。 – gipcompany

+0

@gipcompany不用客氣,這就是爲什麼在加入'RAILS_ENV'之後沒有輸出的確切原因。作爲一些回答,你可以在每個'cd'之後添加'source'ing'步驟,但在你的特定情況下,手動簡單地輸入'.bashrc'內容可能會更好。 – Rubens

4

如果你不介意使用一種變通方法,將它添加到您的.bash_profile

mycd() 
{ 
    cd $1 
    if [ "$(pwd)" == "/your/folder/that/needs/env" ]; then 
     export RAILS_ENV=development 
    else 
     export RAILS_ENV= 
    fi; 
} 
alias cd=mycd 

每次你移動到某個文件夾,這將設置你的環境變量或任何你想

+0

這也適用!謝謝。 – gipcompany