Quelle est la manière la plus concise de résoudre un nom d'hôte en une adresse IP dans un script Bash ? J'utilise Arch Linux.
Réponse acceptée :
Vous pouvez utiliser getent
, qui vient avec glibc
(donc vous l'avez presque certainement sous Linux). Cela résout l'utilisation de gethostbyaddr/gethostbyname2, et vérifiera donc également /etc/hosts
/NIS/etc :
getent hosts unix.stackexchange.com | awk '{ print $1 }'
Ou, comme Heinzi l'a dit ci-dessous, vous pouvez utiliser dig
avec le +short
argument (interroge directement les serveurs DNS, ne regarde pas /etc/hosts
/NSS/etc) :
dig +short unix.stackexchange.com
Si dig +short
n'est pas disponible, l'une des options suivantes devrait fonctionner. Tous ces éléments interrogent DNS directement et ignorent les autres moyens de résolution :
host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'
Si vous ne souhaitez imprimer qu'une seule IP, ajoutez le exit
commande pour awk
le flux de travail.
dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'