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


13

我在笔记本电脑上设置了几个网络位置:公司,家庭等。每个公司都设置了代理服务器,而其他人则没有。对于OSX应用程序-Safari,邮件,甚至是带有System Proxy插件的Firefox和Thunderbird,它都可以正常工作。

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

export HTTP_PROXY='http://proxy.mycompany.com:80'
export http_proxy=$HTTP_PROXY

我的问题是:有什么方法可以使导出的变量从系统的当前位置查找值?我希望它是动态完成的(因此,如果我在终端会话期间更改位置,它将改变),但是我只对在.bash_profile运行时设置它的设备感到满意(这意味着我必须开始一个新的终端会话当我更改位置时)。

谢谢!


这是一个bash脚本,它使用networksetup和安全性提取代理信息并设置http_proxy和https_proxy:gist.github.com/alexargo/4657760

Answers:


8

什么版本的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

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

一个使用awk几次的非常粗糙的示例(我的awk技能很基本)是:

sudo networksetup -getwebproxy Airport | awk {'print $2'} | awk {'getline l2; getline l3; print "http://"l2":"l3'} | head -n 1

结果输出 http://SERVER_ADDRESS:123


6
所有服务的列表:networksetup -listallnetworkservices
Arjan

2
我喜欢这个主意,但对我来说不起作用。如果我只是这样做sudo networksetup -getwebproxy Ethernet,则会得到打印输出,然后出现段错误。我认为段错误会导致管道中断,因此awk永远不会解析任何内容。
詹姆斯·罗森

有信息输出吗?如果没有awk命令,它是否仍然存在段错误?
Chealion

我想我实际上曾经在自己的Mac上看到过分段错误。我现在在10.5.8或10.6.1上都没有这个问题(均为Intel)。也许您正在使用其他版本?
Arjan

我使用的是10.5.8,它在没有的情况下发生awk。添加awk会使段错误消息消失。。。以及所有其他输出。
James A. Rosen

4

上面答案中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

3

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


1

以下内容似乎有效,但我不确定它的坚固程度:

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

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


不幸的是,这似乎不包括端口号。
tlrobinson 2011年

0

您可以使用我编写的小工具,该工具设置代理的常用环境变量。用法很简单:

  1. 用xCode编译。
  2. 加:

    eval `./path/to/export-proxies`

    .profile.bashrc.bash_profile

之后,你可以使用变量,如$HTTP_PROXY$http_proxy$HttpProxy,等所有协议(HTTP,FTP,SOCKS),包括$NO_PROXY异常。这将适用于大多数CLI工具,并可以从OS X控制面板获取设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.