输入目录时在zsh中输入文件

时间:2013-06-11 18:26:24

标签: zsh environment

在输入特定目录时,是否有办法获取特定文件来设置环境?有点像rvm那样,但更一般。

3 个答案:

答案 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涵盖了许多壳

类似项目

  • Environment Modules-最古老的(很好的方式)环境加载系统之一
  • autoenv-轻巧;不支持卸载;用Python编写的速度慢
  • zsh-autoenv-autoenv和smartcd的功能丰富的混合体:输入/离开事件,嵌套,隐藏(仅Zsh)。
  • asdf-具有插件系统的纯bash解决方案