Tente algo como
export IP='( dig ${HOSTNAME} A +short | tail -n1; \
dig ${HOSTNAME} AAAA +short | tail -n1 ) \
| head -n1'
Isso lhe dará:
- Para um host com pelo menos um endereço IPv4, (um dos) o endereço IPv4
- Para um host sem endereços IPv4, mas com pelo menos um endereço IPv6, (um deles) o endereço IPv6
- Para um host sem endereço (IPv4 ou IPv6) no DNS, ou se houver uma falha do resolvedor, um valor vazio
Se você não precisa de recursos IPv4 ou IPv6 (sua pergunta parece indicar que você está mais interessado no endereço IPv4), basta remover o comando dig
( A
é IPv4, AAAA
é IPv6). Então, se você está interessado apenas em endereços IPv4:
export IP='dig ${HOSTNAME} A +short | tail -n1'
O tail -n1
garante que você obtenha um endereço IP (no caso de CNAME
e possivelmente outros tipos de registro, dig
exibe o nome canônico referenciado na primeira linha). O head -n1
garante que você obtenha apenas um único endereço retornando apenas a primeira linha da saída restante (desnecessário no caso de apenas uma família de endereços, pois tail
retornará apenas um endereço). Como os registros de DNS são normalmente veiculados de maneira round-robin, não há garantia de qual endereço exato será retornado para hosts de vários endereços.
Eu não estou muito familiarizado com a escrita de funções bash, mas deve ser relativamente fácil transformar isso em uma função.