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

其中allproxynoproxy的定义如下:

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

Comments