ipコマンドでIPアドレスだけを取得するシンプルな方法を考える

どうでもいい話シリーズ。

net-tools はメンテされなくなってるから、おまえらもう
ifconfig とか使うなコルア!」

と言われ、「 iproute2 使いにあらざれば人にあらず」的な風潮の中、みなさまいかがお過ごしのことでしょう。わたしは 2ちゃんの fusianasan を使います(うそ)。

ぼくのような惰弱な人間は iproute2 さまのような高等なコマンドを使うことはほとんどないのですが一点。 自分のIPアドレスだけは調べたい! なおかつIPアドレスだけをパッと表示してほしい!

まあ、もともと ifconfig でも

# ifconfig
127.0.0.1

なんてお気軽な使い方はできなかったし、「じゃあ /proc ファイルシステムになんかあるのかな」と思っても存在しないし。別に環境が悪くなるわけじゃないんだけど。

とはいえ iproute2 の新しい ip コマンドでは「 ip コマンドって言うくらいなんだからカンタンにIPアドレスが出るんでしょ?」とか期待させられちゃうよね。よし! 実行! …とやると、

# ip
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |
                   netns | l2tp | tcp_metrics | token }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } |
                    -o[neline] | -t[imestamp] | -b[atch] [filename] |
                    -rc[vbuf] [size]}

とか言ってくるツンデレ娘でした。デレたところはまだ見たことないニャー。

しかたないので、こいつのオプションを使ってなんとかIPアドレスだけを取得できないかを調べてみるものの…。

# ip --oneline --family inet address show dev eth0
2: eth0    inet 192.168.10.30/24 brd 192.168.10.255 scope global eth0       valid_lft forever preferred_lft forever

…すみません。先生ここまでで限界です。おれが欲しいのはアドレスだけなんだあああ!

あきらめて bashのコマンドラインワンライナーでごまかす(実際には途中の改行はありません)。

# echo $(ip --oneline --family inet address show dev eth0) 
    | cut -d' ' -f4 
    | cut -d'/' -f1
192.168.10.30

やったぁ!

とはいえ、どう考えても4つもプロセス走らせて資源の無駄遣いきわまりないなあ。きっと世の中にはもっとうまいやり方があるのだろう。

あれね。 /etc/sysconfig/network-scripts/ifcfg-eth0 見ろとかいうのなしね。