在特定目录中设置环境变量

时间:2013-01-22 15:53:41

标签: linux bash variables

这是一个.bashrc问题。 我想在"export FOO=bar"这样的特定目录中为.bashrc设置.rvmrc

我在下面尝试过。

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

但是RAILS_ENV在这种情况下不会被设置。

如果我设置为.rvmrc而不是.bashrc,它会通过!但是设置为.bashrc是更好的方法,因为我不需要安装rvm环境。

任何解决方案?

4 个答案:

答案 0 :(得分:10)

你的bashrc中的

设置了这个:

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

每次重写提示时(实际写入之前)都会执行PROMPT_COMMAND变量的内容上面的命令检查$ PWD变量(它保存shell的当前工作目录)对“/ foo / bar” “如果它匹配,它会导出你的变量,如果不匹配则变量未设置。

EG

peteches@yog-sothoth$ PROMPT_COMMAND='[[ $PWD == "/home/peteches/test" ]] && export FOO=BAR || unset FOO'
peteches@yog-sothoth$ pwd
/home/peteches
peteches@yog-sothoth$ cd test
peteches@yog-sothoth$ pwd
/home/peteches/test
peteches@yog-sothoth$ env | grep FOO
6:FOO=BAR
73:PROMPT_COMMAND=[[ $PWD == "/home/peteches/test" ]] && export FOO=BAR || unset FOO
peteches@yog-sothoth$ cd ../
peteches@yog-sothoth$ pwd
/home/peteches
peteches@yog-sothoth$ env | grep FOO
72:PROMPT_COMMAND=[[ $PWD == "/home/peteches/test" ]] && export FOO=BAR || unset FOO
peteches@yog-sothoth$ 

答案 1 :(得分:5)

如果您不介意使用变通方法,请将其添加到.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

每当您移动到某个文件夹时,这将设置您的env变量或任何您想要的

答案 2 :(得分:4)

首先,AFAIK,bash不会在您的家中搜索任何其他目录中的.bashrc文件 - 至少在默认情况下不会。

其次,在向.bashrc撰写新条目后,您应该source .bashrc该文件,以便进行修改。

答案 3 :(得分:1)

签出direnv

direnv是您的Shell的扩展名。它通过新功能扩展了现有Shell,可以根据当前目录加载和卸载环境变量。

基本上检查当前目录或父目录中的.envrc个文件,并相应地调整环境变量。