タイトルの通りです。
*nixの便利コマンドgetent
を使うと、こういう感じで/etc/hosts
を見たりDNSサーバに問い合わせたりしつつ名前解決してくれる。(getent
自体は名前解決専用のツールではないので、他にもいろいろな情報を引くことが出来るけど今回は割愛)
$ getent hosts idolmaster.jp 52.192.154.178 idolmaster.jp
便利なので、シェルスクリプトの中でこういう感じに書いてホスト名からIPを引いてたりする。
host_ip=$(getent hosts $host | awk '{ print $1; exit }')
しかしながらMacにはgetent
はない。適当にインターネットを検索すると、MacだとDirectory Serviceが同様の役割を担っているようで、dscacheutil
を使うと引くことが可能そう。
apple.stackexchange.com
$ dscacheutil -q host -a name idolmaster.jp name: idolmaster.jp ip_address: 52.192.154.178 ip_address: 54.238.242.145
一応試してみたけど/etc/hosts
も参照できてそう。
$ cat /etc/hosts | grep astjtest 10.XXX.XXX.XXX astjtest002.host $ dscacheutil -q host -a name astjtest002.host name: astjtest002.host ip_address: 10.XXX.XXX.XXX
ここからipだけほしければ、getent
の時と同じようにawk
すればよくて、
host_ip=$(dscacheutil -q host -a name $host | grep ip_address | awk '{ print $2; exit }')
結局、Macと非Macの両方で動くようにしたければこういう感じでよいのかな、というようになった。
if type dscacheutil > /dev/null ; then # Mac OS doesn't have getent and has dscacheutil instead host_ip=$(dscacheutil -q host -a name $host | grep ip_address | awk '{ print $2; exit }') elif type getent > /dev/null ; then host_ip=$(getent hosts $host | awk '{ print $1; exit }') fi
オチなし。