[Shell] 按需手动设置终端某个命令的代理

陪她去流浪 桃子 2019年07月16日 编辑 阅读次数:2988

很多人在使用代理软件的时候,喜欢开全局模式,但是我却不喜欢这样,我喜欢在需要的时候手动开启,原因就不解释了。

以往在需要手动开启的时候,我会在命令执行前导出一下设置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 先导出设置
$ export http_proxy=http://localhost:1080
$ export https_proxy=http://localhost:1080

# 再执行命令
$ go get

# 不需要的时候关闭
$ export http_proxy=
$ export https_proxy=

这样做有点麻烦。

后来我想到了一个办法:我写了一个脚本,把要执行的命令作为参数放在脚本里面执行。在这个脚本执行命令之前,先设置代理,然后正式执行命令。 由于脚本是在子进程中执行的,所以在脚本里面做的任何设置都不会影响到当前进程。脚本结束后,设置自动消失。所以这是一个非常巧妙的办法。

这个脚本非常简单,内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash

# 这里是你的服务器
proxy='http://raspberrypi:1080'

# 这个设置会影响当前进程执行的其它所有进程
export http_proxy="$proxy"
export https_proxy="$proxy"

"$@"

脚本下载:proxy.sh,记得去掉后缀(非必须)。

我把它放在了/usr/local/bin/proxy,记得加上可执行权限(/usr/local/bin在我的PATH里面)。

使用方法:

1
2
3
4
5
# 若不使用
$ curl https://www.example.com

# 若使用
$ proxy curl https://www.example.com

非常地简单明了。

灵感来源:tsocks

标签:代理 · Bash