终端进入目录自动运行 shell 脚本

利用 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 项目才会使用覆盖后的配置。