95 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: OS Xのネットワーク環境に合わせてHTTP_PROXYを切り替えるシェルスクリプト
 | |
| date: 2013-11-05 09:00:00 +09:00
 | |
| ---
 | |
| 
 | |
| 
 | |
| 
 | |
| 大学のネットワークに接続している時だけプロキシを設定したい時がある。
 | |
| 
 | |
| 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`とタイプしてプロキシを切り替えられるようになる。
 | |
| ```
 |