WSL 双代理一键脚本(~/proxy.sh)

5.1 需求与约束

  • 两个代理互斥(环境变量同名,无法按目标分流叠加):gost(xyz) 与 公司 iOA。
  • xyz 开 gost;off 关脚本代理并保留 iOA;clear 彻底清所有代理且常驻写入 ~/.bashrcno_proxy 始终常驻 bashrc。
  • 关键发现:off 后公司 iOA 自动可用(iOA 是 Windows 系统级,WSL 默认继承,之前只是被脚本 unset 清掉)。

5.2 常驻块设计(~/.bashrc 内三段,带标记可幂等增删)

标记内容何时写入
proxy.sh no_proxy begin/endexport no_proxy/NO_PROXY="..."每次执行都重写(常驻)
proxy.sh clear begin/endunset http_proxy https_proxy all_proxy HTTPS_PROXY HTTP_PROXY ALL_PROXYclear 时写;xyz/off 时删
proxy.sh begin/end[ -f ~/.proxy-env.sh ] && . ~/.proxy-env.shxyz 时挂载;off/clear 时摘

5.3 指令语义

指令当前终端bashrc clear 块新终端效果
xyz注入 gost移除走 gost
off清脚本变量移除系统 iOA 自动恢复
clear清所有写入彻底无代理(含 iOA)

5.4 用法

 
source ~/proxy.sh xyz     # 开 gost,当前终端立即生效
 
source ~/proxy.sh off     # 关脚本代理,iOA 恢复
 
source ~/proxy.sh clear   # 常驻写入 unset,彻底无代理
 
~/proxy.sh status         # 看状态
 
env | grep -i proxy       # 看状态
 

source ~/proxy.sh xyz 一步完成「生成配置 + 当前终端生效」;source ~/.bashrc 只是重载旧文件,不能切换/开启。

5.5 no_proxy 固定值


localhost,127.0.0.1,::1,.t.xyz,192.168.10.0/24,10.66.18.0/20

  • .t.xyz(前导点)而非 *.t.xyz,兼容性最广(覆盖 curl/wget/git/Go 等)。

  • 含 EasyTier 虚拟网段与 WSL 子网,防止隧道流量被代理劫持导致掉线。

5.6 实现要点(踩坑修正记录)

  • sed 多行替换用「先 /BEGIN/,/END/d 删块再追加」,不用 c\(GNU sed 多行不稳定)。

  • clearunset 行必须写进 bashrc 常驻(用户要求),而非仅当前终端执行。

  • iOA 用 127.0.0.1:12639 按用户要求;若 WSL 内连不通,改 IOA_HOST="AUTO" 自动探测宿主 IP。