脚本会 export http_proxy,打印“enabled”然后退出。此后从原终端启动的 Curl 仍然沿用旧环境。

执行脚本只是创建了一个子进程。export 让值对该进程的子进程可用,并不会把值送回父 shell。把 export 放进 bash -c 或反引号里,也不会扭转这层关系。

要做交互式开关,在当前 shell 中定义的函数才能完成预期的工作:

proxy_on() {
    export http_proxy=http://proxy.example.net:8080
    export https_proxy="$http_proxy"
}

把示例 endpoint 换成你自己的 HTTP 服务,或换成 HTTP 代理列表中允许用于公开请求的候选。加载定义之后再调用该函数。source 进来的 shell 文件是另一种在当前 shell 而非新 shell 中执行赋值的方式。

已经运行的 GUI 程序和其他终端仍各自保留自己的环境。如果这个辅助脚本只是为了启动一条走代理的命令,把改动限制在该命令的环境里往往正是恰当的范围。

相关文章