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

输入目录时,在zsh中源文件,zsh,environment,Zsh,Environment,在进入特定目录时,是否有办法获取特定文件以设置环境?有点像rvm所做的,但更一般。您可以定义一个函数来执行cd,然后生成一个文件。此函数将尝试在新目录中查找source.source\u me(如果存在): mycd () { builtin cd $@ [ $? -eq 0 -a -f .source_me ] && source .source_me } 启用将函数用于 alias cd=mycd IMHO您不应为此使用别名,但应为任何目录更改添加挂钩: autoload

在进入特定目录时,是否有办法获取特定文件以设置环境?有点像rvm所做的,但更一般。

您可以定义一个函数来执行cd,然后生成一个文件。此函数将尝试在新目录中查找source.source\u me(如果存在):

mycd () {
builtin cd $@
[ $? -eq 0 -a -f .source_me ] && source .source_me
}
启用将函数用于

alias cd=mycd

IMHO您不应为此使用别名,但应为任何目录更改添加挂钩:

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,如果您希望在不触发挂钩的情况下更改目录,请使用
cd-q dirname

您想要实现的是为特定目录设置环境变量

与其他为此设计的工具相比,它是其中最好的。主要好处之一是,它支持在退出该目录时卸载环境变量

direnv
是shell的环境切换器。它知道如何钩住bash、zsh、tcsh、fish shell和elvish来加载或卸载环境变量,具体取决于当前目录。这允许项目特定的环境变量,而不会使
~/.profile
文件混乱

是什么使
direnv
在其他类似工具之间有所区别:

  • direnv
    是用Go编写的,与用Python编写的对应程序相比,它的速度更快
  • direnv
    支持从特定目录退出时卸载环境变量
  • direnv
    覆盖了许多外壳
类似项目

  • -最古老的(以良好方式)环境加载系统之一
  • -重量轻;不支持卸载;用Python编写的慢速
  • -autoenv和以下功能的丰富混合:输入/离开事件、嵌套、隐藏(仅限Zsh)
  • -具有插件系统的纯bash解决方案

这就是我要找的。我知道乔的答案行得通,但我知道还有更好的办法。谢谢,
addzsh-hook
正是我要找的。太好了。我想是时候重温一下手册了。您也可以简单地尝试获取文件的源代码并忽略任何错误:
source.source|me|true
。使用
自动加载
添加zsh钩子
的两个字符串可以通过一个字符串-
chpwd_函数+=(加载本地配置)