screenのhardstatus alwayslastlineにIPアドレスを表示する

パソコンを同時に2台くらい使っていると、あるパソコンから別のパソコンにSSHで繋いだりファイル転送したりしたくなる時がある。

その度に、/sbin/ifconfig でinetアドレスを確認するのも面倒なので、screenのhardstatus alwayslastlineに常時表示させておくことにする。

試しに、Pythonで出来るか。

>>> import socket
>>> socket.gethostbyname(socket.gethostname())
'127.0.1.1'

知ってるよ!

と、横着は出来ないようで、 get the IP address associated with a network interface (linux only) « Python recipes « ActiveState Code とか http://yamashita.dyndns.org/blog/get-ip-address-with-python/ の様にする必要がある。

ifconfigの出力を加工した方が(見た目が)楽だ。ifconfigの出力から、inetという単語が含まれる行をgrepで選んで、awkIPアドレス部を取る。

#!/bin/sh
/sbin/ifconfig|grep "inet[^6]"|grep -v "127.0.0.1"|awk '{print $1}'|awk -F: '{ print $2 }'|tail -n 1

MacなどのBSD系だともうちょっと短く書ける。

#!/bin/sh
/sbin/ifconfig|grep "inet[^6]"|grep -v "127.0.0.1"|awk '{print $2}'|tail -n 1

ネットワークインタフェースが複数あると、それぞれのIPアドレスが出てくるので、ここは横着して、最後の行のネットワークインタフェースのIPアドレスを取っている。

$ ./printip.sh
172.20.6.12

これをscreenに表示させるために、backtickに登録する。

backtick 1 3600 3600 $HOME/.local/bin/printip.sh
hardstatus alwayslastline "(略) $USER@%1` (略)"

とすれば、username@IPアドレス がscreenに常時表示される。