--- title: OS Xのネットワーク環境に合わせてHTTP_PROXYを切り替えるシェルスクリプト date: 2013-11-05 09:00:00 +09:00 --- ![](/uploads/osx-http-proxy.png) 大学のネットワークに接続している時だけプロキシを設定したい時がある。 Mac のネットワーク環境は`networksetup -getcurrentlocation`コマンドで取得することが出来るので、 **.zshrc** 辺りに以下のシェルスクリプトを書いておけば Terminal で新しいタブを開いた時に自動でプロキシを設定してくれるはずである。 ```bash proxy=proxy.hogehoge.ac.jp switch_trigger=大学 if [ "`networksetup -getcurrentlocation`" = "$switch_trigger" ]; then export HTTP_PROXY=$proxy export FTP_PROXY=$proxy ...以下省略 fi ``` ## Git のプロキシ設定も書き換えたい Git は http_proxy を見てくれないのでリモートリポジトリに push 出来なくて困ることがあった。そこで http_proxy と一緒に Git のプロキシ設定も書き換えるようにしたい。 Git のプロキシは以下のコマンドで設定出来る。`--global`の代わりに`--system`を使っても良い。 ```bash git config --global http.proxy $proxy git config --global https.proxy $proxy git config --global url."https://".insteadOf git:// ``` 逆に `git config` から設定を削除したい場合は`git config --gobal --unset {item}`を使えば良い。 先ほどのコマンドと組み合わせることで最終的なコードは以下のようになる。 ```bash:switch_proxy.sh proxy=proxy.hogehoge.ac.jp:80 switch_trigger=大学 function set_proxy() { export http_proxy=$proxy export HTTP_PROXY=$proxy export ftp_proxy=$proxy export FTP_PROXY=$proxy export all_proxy=$proxy export ALL_PROXY=$proxy export https_proxy=$proxy export HTTPS_PROXY=$proxy git config --global http.proxy $proxy git config --global https.proxy $proxy git config --global url."https://".insteadOf git:// } function unset_proxy() { unset http_proxy unset HTTP_PROXY unset ftp_proxy unset FTP_PROXY unset all_proxy unset ALL_PROXY unset https_proxy unset HTTPS_PROXY git config --global --unset http.proxy git config --global --unset https.proxy git config --global --unset url."https://".insteadOf } if [ "`networksetup -getcurrentlocation`" = "$switch_trigger" ]; then echo "Switch to proxy for university network" set_proxy else unset_proxy fi ``` このコードを **.zshrc** に保存して適当なターミナルで新しいセッションを開くと、`switch_trigger`で指定されたネットワーク環境下にいる時だけプロキシを通すことが出来る。 既に開いているセッションに対してプロキシを適用する方法がわからなかった。 Workaround として、コードを **~/.switch_proxy** 辺りに置いて、 ```bash:~/.zshrc alias nswitch=~/.switch_proxy ``` と`.zshrc`に書いておくことで、`nswitch`とタイプしてプロキシを切り替えられるようになる。 ```