Zsh中对cd命令的hook zsh中预留了一个chpwd()用于hook各种cd命令,包括cd pushd popd等。 首先打开~/.zshrc,增加chpwd函数。作用是在ccproj或其子目录,使用全局代理,否则关闭代理。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 chpwd() case $PWD in (*/ccproj) echo using proxy allproxy ;; (*/ccproj/*) echo using proxy allproxy ;; (*) noproxy ;; esac 其中allproxy和noproxy的定义如下: 1 2 alias allproxy='export ALL_PROXY=socks5://127.0.0.1:9050' alias noproxy='export ALL_PROXY=' 经过设置,每次切换路径就会自动切换代理。但是新开的terminal窗口是不会被hook的。我们手动在~/.zshrc中增加新窗口打开后原地执行一次cd .命令,修改后的~/.zshrc如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 alias allproxy='export ALL_PROXY=socks5://127.0.0.1:9050' alias noproxy='export ALL_PROXY=' chpwd() case $PWD in (*/ccproj) echo using proxy allproxy ;; (*/ccproj/*) echo using proxy allproxy ;; (*) noproxy ;; esac cd . 以后就可以随意切路径不会忘了改代理了。 Over macos, shell Comments