大学のネットワークに接続している時だけプロキシを設定したい時がある。
Mac のネットワーク環境はnetworksetup -getcurrentlocation
コマンドで取得することが出来るので、
.zshrc 辺りに以下のシェルスクリプトを書いておけば Terminal で新しいタブを開いた時に自動でプロキシを設定してくれる。
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
を使っても良い。
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}
を使えば良い。
先ほどのコマンドと組み合わせることで最終的なコードは以下のようになる。
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 辺りに置いて、
alias nswitch=~/.switch_proxy
と.zshrc
に書いておくことで、nswitch
とタイプしてプロキシを切り替えられるようになる。