Jaký je nejvýstižnější způsob, jak přeložit název hostitele na IP adresu ve skriptu Bash? Používám Arch Linux.
Přijatá odpověď:
Můžete použít getent , který je dodáván s glibc (takže to téměř jistě máte na Linuxu). To se vyřeší pomocí gethostbyaddr/gethostbyname2, a tak se také zkontroluje /etc/hosts /NIS/etc:
getent hosts unix.stackexchange.com | awk '{ print $1 }'
Nebo, jak řekl Heinzi níže, můžete použít dig pomocí +short argument (dotazuje se přímo na servery DNS, nehledí na /etc/hosts /NSS/etc):
dig +short unix.stackexchange.com
Pokud dig +short není k dispozici, měla by fungovat kterákoli z následujících možností. Všechny se dotazují přímo na DNS a ignorují ostatní způsoby rozlišení:
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 }'
Pokud chcete vytisknout pouze jednu IP, přidejte exit příkaz k awk pracovní postup.
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 }'