6

这是一个 .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

4 回答 4

13

在你的 bashrc 中设置这个:

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

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

例如

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$ 
于 2013-01-22T16:15:02.500 回答
6

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

每次您移动到某个文件夹时,这都会设置您的环境变量或您想要的任何内容

于 2013-01-22T16:15:33.770 回答
4

首先,AFAIKbash不会.bashrc在除您家之外的任何其他目录中搜索文件——至少默认情况下不会。

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

于 2013-01-22T16:04:29.273 回答
1

查看direnv

direnv是您的外壳的扩展。它增加了现有的 shell 的新功能,可以根据当前目录加载和卸载环境变量。

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

于 2020-07-15T16:10:08.713 回答