自宅でgitサーバーを運用中であるが、DNSサーバーを建てていないのでサーバーのLAN内に入った時にいちいち
/etc/hosts
を書き換えなければならない。(コメントアウトするか外すか)
例えば
192.168.0.2 example.com
を
#192.168.0.2 example.com
にするためだけに、
sudo vim /etc/hosts
として書き換えるのは阿呆らしい。
かといって稼働中でバリバリ使用中のサーバーサイドをいじりたくなかったので、hostsファイルを半自動で書き換えてしまえと思いました。
#!/bin/sh var=`sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I|grep "\sSSID"|sed -e "s/[^:]*: //"` var2=`cat /etc/hosts|grep "example"` if [ -z ${var} ]; then # echo "Please turn on Wifi or connect to the Wifi spot!" exit 1 elif [ ${var} = "your_SSID" ]; then echo ${var2} | grep '#' if [ $? -eq 0]; then #if [ !`echo ${var2} | grep -q '#'` ]; then sed -i -e '/example/s/^#//' /etc/hosts fi else echo ${var2} | grep -q '#' if [ $? -eq 0 ]; then #if [ `echo ${var2} | grep -q '#'` ]; then echo "already have #" else echo "add # on the beginning" sed -i -e '/example/s/^/#/' /etc/hosts fi fi exit $?
Githubにもソースをあげているのでご自由にどうぞNa0ki/hosts_rename_script · GitHub
上から順に雑に説明します。
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I
で以下の情報が得られます。(値は適当に変えてあります)
agrCtlRSSI: -57 agrExtRSSI: 0 agrCtlNoise: -95 agrExtNoise: 0 state: running op mode: station lastTxRate: 300 maxRate: 300 lastAssocStatus: 0 802.11 auth: open link auth: wpa2-psk BSSID: 0:0:00:00:00:00 SSID: your_SSID MCS: 15 channel: 44,1
ここからSSIDの行grepしてsedで整形してあげれば、SSIDを取得できます。(varの中身)
次にexample.comのある行を取得したいのでexampleでgrepをかけています。
最初のifではwifiが接続されていない場合を想定しています。wifiが接続されていない場合はNULLが返ってくるため
[ -z ${var} ]
でNULLの場合の処理に持って行っています。
次のifはサーバーと同一LAN内にいる場合の処理を書いています。
sedでexample.comの行頭のコメントアウトを外しています。
最後はサーバーのLAN外にいるときはコメントアウトするように処理しています。
以上です。
シェルスクリプトを普段書かないので書式に随分と苦しめられました。
助けてくれた友人に感謝。
OSXではlaunchdでスクリプトをバックグラウンドで動かせるらしいので、このスクリプトを動かせるようにlaunchdの勉強中です(☝ ՞ਊ ՞)☝
ではでは