##必要動作
- IPアドレスを表示 : 当然ですね
- 複数OSに対応 : ディストリビューションの違いとかMacとかにも
- わかりやすい内容 : あとから編集するの面倒だしね
といった動作が必要だなあと。
誰かやってるような気がするけど、まあ初投稿だしこんなもんでいいか(
##OS判定
上の必要動作の順番と違いますが、まあいいです。
2番目のやつを実現するためにos.shなどというスクリプトを作りました。
内容は非常に単純で、unameからOSを判定するだけです。
で、そのあとIPアドレスを読み込むスクリプトを実行します。
#!/bin/sh
if [ `uname` = "Darwin" ]
then
~/.zsh.d/ipaddr_m.sh
elif [ `uname` = "Linux" ]
then
~/.zsh.d/ipaddr_l.sh
fi
##IPアドレス読込
###Mac OS X
筆者は、Macbook AirとiMacを使っているため、IPアドレスの取得を考えないといかんのですよね。
OS Xでは、ifconfigとうつとNICはen*で表現されるため、それの取得をどちらにするかがまた面倒なのよね。
筆者の環境ではこうなっています。
- iMac
- en0 : 有線
- en1 : 無線(通常は使わない)
- Macbook Air
- en0 : 無線
- en2 : 有線(USB Ethernet Adapter)
今回、Thunderbolt Ethernet Adapterは調査してません!
基本的には、有線のほうを優先(笑)しています。
そのため、ifconfig からen2があるかどうかを調査する必要が出てきます。
で、3行目がそれです(これって行番号出せれないの?)。
en2があるなら表示、ないならen0を表示。
iMacについては基本的にはen0のみを利用します。
#!/bin/sh
ifconfig | grep en2 > /dev/null
if [ $? -eq 0 ]
then
ifconfig en2 | grep -v inet6 | grep inet | cut -f 2 -d':' | cut -d' ' -f 2
else
ifconfig en0 | grep -v inet6 | grep inet | cut -f 2 -d':' | cut -d' ' -f 2
fi
###Linux
Linuxはsshで接続するのみなので、てきとーです。
環境がどうなってるのかわからんので、条件分岐もテキトーです。
わかったら直す予定。あくまで予定
#!/bin/sh
if [ `/sbin/ifconfig | grep eth1`]; then
/sbin/ifconfig eth1 | grep inet | grep -v inet6 | cut -f 2 -d':' | cut -d' ' -f 1
else
/sbin/ifconfig eth0 | grep inet | grep -v inet6 | cut -f 2 -d':' | cut -d' ' -f 1
fi
hoge
##.zshrc
プロンプト設定は気にせずに…
ipという変数に./os.sh
の出力結果(ipaddr_*.sh
の出力結果)を格納して、それを出力します。
簡単ですね。
ip=`~/.zsh.d/os.sh`
# プロンプト設定
PROMPT="
[%n@%m($ip)] %{${fg[yellow]}%}%~%{${reset_color}%}
%(?.%{$fg[green]%}.%{$fg[blue]%})%(?!ζ*'ヮ'%)ζ <! ζ*;ヮ;%)ζ <)%{${reset_color}%} "
SPROMPT="%{$fg[red]%}%{$suggest%}ζ*'ヮ'%)ζ? < もしかして %B%r%b %{$fg[red]%}ですか? [うっう〜!(y), うっう〜!(n),a,e]:${reset_color} "