利用 prompt 钩子,可以在终端进入目录时执行特定的 shell 代码。如:
Call function 'foo'
PROMPT_COMMAND=foo
# The function
foo() {
pwd
}
对于使用 oh-my-zsh
的情况,可以直接做成插件形式,如:
# ~/.oh-my-zsh/plugins/puglin-xx
setopt PROMPT_SUBST
typeset -ga chpwd_functions
chpwd_functions+='foo'
function foo() {
# whatever code
pwd
}
利用这个特性可以做一些特殊的需求,比如检测 git 仓库的用户名是否是合适的(使用多家 git 托管服务且用户名不一致的情况下有用),分支是否 ok 等。
Update@2019-01-29
如果是不同 git 使用不同配置的情况(如区分个人和工作配置),可以使用 git include 配置 来解决,如:
~/.gitconfig
[user]
name = personal_name
email = xxx@personal.com
[includeIf "gitdir/i:~/work/"]
path = ~/.gitconfig_work
~/.gitconfig_work
[user]
name = work_name
email = xxx@work.com
这样,一旦项目位于 ~/work/
下,那么就是使用 ~/.gitconfig_work
的配置来覆盖通用的。
需要注意,如果目录是做来软链的,那么软链后的路径以及软链前的路径都需要配置才能不管是用软链还是使用真实路径访问 git 项目才会使用覆盖后的配置。