Qual è il modo più conciso per risolvere un nome host in un indirizzo IP in uno script Bash? Sto usando Arch Linux.
Risposta accettata:
Puoi usare getent
, che viene fornito con glibc
(quindi quasi sicuramente lo hai su Linux). Questo si risolve usando gethostbyaddr/gethostbyname2, quindi controllerà anche /etc/hosts
/NIS/ecc:
getent hosts unix.stackexchange.com | awk '{ print $1 }'
Oppure, come ha detto Heinzi di seguito, puoi usare dig
con il +short
argomento (interroga direttamente i server DNS, non guarda /etc/hosts
/NSS/ecc) :
dig +short unix.stackexchange.com
Se dig +short
non è disponibile, uno qualsiasi dei seguenti dovrebbe funzionare. Tutti questi interrogano direttamente il DNS e ignorano altri mezzi di risoluzione:
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 }'
Se desideri stampare un solo IP, aggiungi exit
comando a awk
flusso di lavoro.
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 }'