¿Cuál es la forma más concisa de resolver un nombre de host en una dirección IP en un script Bash? Estoy usando Arch Linux.
Respuesta aceptada:
Puedes usar getent , que viene con glibc (así que casi seguro que lo tienes en Linux). Esto se resuelve usando gethostbyaddr/gethostbyname2, y también verificará /etc/hosts /NIS/etc:
getent hosts unix.stackexchange.com | awk '{ print $1 }'
O, como dijo Heinzi a continuación, puede usar dig con el +short argumento (consulta servidores DNS directamente, no mira /etc/hosts /NSS/etc) :
dig +short unix.stackexchange.com
Si dig +short no está disponible, cualquiera de los siguientes debería funcionar. Todos estos consultan DNS directamente e ignoran otros medios de resolución:
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 solo desea imprimir una IP, agregue el exit comando a awk flujo de trabajo.
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 }'