特定NICのIPアドレスをもっとかんたんに取得したい…
|呪わしき社会の変化に伴い ip
コマンドを使うようスイッチさせられたわけで。とはいえ、ifconfig
より多少は出力が構造化されてて sed
とか使わなくても取れるようになっているのかと思えばなっていない今日このごろ。
このあいだまで、NICの切り分けすら ip
単体でできず、
$ DEVICE=docker0
$ ADDR=$(
/sbin/ip -f inet -o addr
| /bin/grep "${DEVICE-}"
| /bin/sed -e 's/^.* *inet *([0-9.][0-9.]*).*$/1/'
)
$ echo $ADDR
172.17.42.1
$
などとしていたわけだが「たかがIPアドレス確認で3つもコマンド立ち上げるのかよ!」という不満がありありだった。
と思ってたら、show
サブコマンドの存在に今ごろ気づいた…。
$ ip -o -f inet addr show dev docker0
とすれば、
3: docker0 inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever
のように特定NICの情報を取るのに grep
が要らない。
$ DEVICE=docker0
$ /sbin/ip -o -f inet addr show dev "${DEVICE-}"
| /bin/sed -e 's/^.* *inet[[:blank:]]{1,}([0-9.]{1,}).*$/1/'
sed の正規表現がより厳密になっているのは単なる心変わり…とはいえこれ、grep
がなくなっただけで、けっきょく sed
呼ばなきゃいけないのは同じなんだよなあ…。
- もっと短くならないの?
- そもそもコマンドの引数がキー・バリューペアになってなくて位置による解釈なのはイヤだ
という気がする。なんかもっとうまい方法ないのかな。
ちなみに hostname -i
だと全NICのIPアドレスが羅列されて、手数が増えるだけなのでパス。