如何在 Bash 脚本中获取 Mac OS X 的代理信息?

Jam*_*sen 15 terminal bash proxy macos

我在我的笔记本电脑上设置了几个网络位置:工作、家庭等。工作中的一个都设置了代理服务器,而其他的则没有。这适用于 OSX 应用程序——Safari、Mail,甚至带有系统代理的Firefox 和 Thunderbird插件的。

对于终端应用,例如gitsvngem,和curl我在下面.bash_profile

export HTTP_PROXY='http://proxy.mycompany.com:80'
export http_proxy=$HTTP_PROXY
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法让导出的变量从我的系统当前位置查找值?我更喜欢它是动态完成的(所以如果我在终端会话期间改变位置,它会改变),但我会很高兴只有一个设置它的时候.bash_profile运行(这意味着我必须开始一个新的终端会话)当我改变位置时)。

谢谢!

Che*_*ion 9

什么版本的 Mac OS X?我不认为该工具包含在 Mac OS X 10.4 或更早版本中。

networksetup应该是您要查找的内容,即sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(例如 sudo networksetup -getwebproxy Airport)

输出如下:

Enabled: Yes
Server: SERVER_ADDRESS
Port: 123
Authenticated Proxy Enabled: 0 for false, 1 for true
Run Code Online (Sandbox Code Playgroud)

因此,您需要将输出转换为可用的内容。

使用 awk 几次(我的 awk 技能相当基本)的一个非常粗略的例子是:

sudo networksetup -getwebproxy Airport | awk {'print $2'} | awk {'getline l2; getline l3; print "http://"l2":"l3'} | head -n 1
Run Code Online (Sandbox Code Playgroud)

输出结果 http://SERVER_ADDRESS:123

  • 所有服务的列表:`networksetup -listallnetworkservices` (6认同)
  • 我喜欢这个主意,但它对我不起作用。如果我只是执行`sudo networksetup -getwebproxy Ethernet`,我会得到打印输出,然后是段错误。我想段错误会导致管道中断,因此 `awk` 永远无法解析任何内容。 (2认同)

Bri*_*ice 9

此外,此命令可能有助于发现其他代理设置:scutil --proxy

  • 这是唯一返回代理的命令(“networksetup”和“system_profiler”都显示它)——并且 Safari/Firefox 使用的是该命令。这是我使用内置 VPN 的时候。 (2认同)

小智 5

上面的回答,有评论tlrobinson如何不包括端口号。

您可以通过使用HTTP 代理端口切换HTTP 代理服务器来做到这一点

我也见过这样做的:

system_profiler SPNetworkDataType | grep "HTTP Proxy Server" | awk '{print $4}' | head -1
system_profiler SPNetworkDataType | grep "HTTP Proxy Port" | awk '{print $4}' | head -1
Run Code Online (Sandbox Code Playgroud)


Jam*_*sen 1

以下似乎有效,但我不确定它有多强大:

system_profiler SPNetworkDataType|grep "HTTP Proxy Server"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'}
Run Code Online (Sandbox Code Playgroud)

proxy.pac如果您的位置使用而不是硬编码的代理位置,则它不起作用。