这是一个.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环境。
任何解决方案?
答案 0 :(得分:10)
设置了这个:
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
个文件,并相应地调整环境变量。