web-dev-qa-db-ja.com

Mac OS Xのプロキシ情報をBashスクリプトで取得するにはどうすればよいですか?

私のラップトップにはいくつかのネットワークロケーションが設定されています。職場、自宅などです。職場ではすべてプロキシサーバーがセットアップされていますが、その他ではセットアップされていません。これは、OSXアプリケーション(Safari、Mail、Firefox、Thunderbirdでも System Proxy プラグイン)で正常に機能します。

gitsvngemcurlなどの端末アプリケーションの場合、.bash_profile

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

私の質問はこれです:エクスポートされた変数にシステムの現在の場所から値を参照させる方法はありますか?動的に実行することをお勧めします(そのため、ターミナルセッション中に場所を変更すると変更されます)が、.bash_profile実行しました(場所を変更したときに、新しいターミナルセッションを開始する必要があることを意味します)。

ありがとう!

13
James A. Rosen

以下は機能するようですが、どれほど堅牢かはわかりません。

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

場所がハードコードされたプロキシの場所の代わりにproxy.pacを使用している場合は機能しません。

1
James A. Rosen

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

8
Chealion

上記の回答 には、ポート番号が含まれていない方法について 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
4
steve

さらに、このコマンドは他のプロキシ設定を検出するのに役立ちます:scutil --proxy

3
Brice

小さなツール を使用できます。これは、プロキシに一般的に使用される環境変数を設定します。使い方は簡単です:

  1. XCodeでコンパイルします。
  2. 追加:

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

    .profile.bashrc、または.bash_profileに変換します。

その後、$HTTP_PROXY例外を含むすべてのプロトコル(HTTP、FTP、SOCKS)に$http_proxy$HttpProxy$NO_PROXYなどの変数を使用できます。これはほとんどのCLIツールで機能し、OS Xコントロールパネルから設定を取得します。

0
jan.vogt