在输入特定目录时,是否有办法获取特定文件来设置环境?有点像rvm那样,但更一般。
答案 0 :(得分:14)
恕我直言,你不应该为此使用别名,但为任何目录更改添加一个钩子:
autoload -U add-zsh-hook
load-local-conf() {
# check file exists, is regular file and is readable:
if [[ -f .source_me && -r .source_me ]]; then
source .source_me
fi
}
add-zsh-hook chpwd load-local-conf
此挂钩函数将在任何目录更改时运行。
FWIW,如果您希望更改dirs 而不触发挂钩,请使用cd -q dirname
答案 1 :(得分:1)
您可以定义一个执行cd然后获取文件的函数。此函数将尝试在新目录中获取.source_me(如果存在):
mycd () {
builtin cd $@
[ $? -eq 0 -a -f .source_me ] && source .source_me
}
启用
功能alias cd=mycd
答案 2 :(得分:0)
您要实现的是为特定目录设置环境变量。
与为此目的设计的其他工具相比,direnv
是最好的工具。主要优点之一是,当您从该目录退出时,它支持卸载环境变量。
direnv
是Shell的环境切换器。它知道如何挂钩bash,zsh,tcsh,鱼壳和精灵来加载或卸载环境变量,具体取决于当前目录。这样就可以特定于项目的环境变量,而不会弄乱~/.profile
文件。
是什么使direnv
在其他类似工具中与众不同:
direnv
用Go编写,与用Python编写的同行相比,更快
direnv
支持从特定目录退出时卸载环境变量direnv
涵盖了许多壳类似项目