LoginSignup
5
3

More than 5 years have passed since last update.

zshのプロンプトにIPアドレスを表示したい

Last updated at Posted at 2013-06-11

必要動作

  1. IPアドレスを表示 : 当然ですね
  2. 複数OSに対応 : ディストリビューションの違いとかMacとかにも
  3. わかりやすい内容 : あとから編集するの面倒だしね

といった動作が必要だなあと。

誰かやってるような気がするけど、まあ初投稿だしこんなもんでいいか(

OS判定

上の必要動作の順番と違いますが、まあいいです。
2番目のやつを実現するためにos.shなどというスクリプトを作りました。
内容は非常に単純で、unameからOSを判定するだけです。
で、そのあとIPアドレスを読み込むスクリプトを実行します。

.os.sh
#!/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のみを利用します。

ipaddr_m.sh
#!/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で接続するのみなので、てきとーです。
環境がどうなってるのかわからんので、条件分岐もテキトーです。
わかったら直す予定。あくまで予定

ipaddr_l.sh
#!/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の出力結果)を格納して、それを出力します。
簡単ですね。

.zshrc

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} "
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3