Спробуйте щось на кшталт
export IP=`( dig ${HOSTNAME} A +short | tail -n1; \
dig ${HOSTNAME} AAAA +short | tail -n1 ) \
| head -n1`
Це дасть вам:
- Для хоста, що має щонайменше одну адресу IPv4, (одну з) адресу IPv4
- Для хоста, який не має IPv4-адрес, але має принаймні одну адресу IPv6, (одну з) адресу IPv6
- Для хоста, який взагалі не містить (IPv4 або IPv6) адреси в DNS, або якщо є помилка роздільної здатності, порожнє значення
Якщо вам не потрібні можливості IPv4 або IPv6 (схоже, ваше питання вказує, що вас найбільше цікавить адреса IPv4), просто видаліть цю digкоманду ( Aце IPv4, AAAAце IPv6). Отже, якщо вас цікавлять лише адреси IPv4:
export IP=`dig ${HOSTNAME} A +short | tail -n1`
У tail -n1гарантує , що ви отримаєте IP - адреса (у разі CNAME, і , можливо , інші типи записів, digвиводить контрольний канонічне ім'я на першій лінії). У head -n1гарантує , що ви отримаєте тільки одну адресу, повертаючи тільки першу лінію залишкового заряду (непотрібної в разі тільки одного сімейства адрес, так як tailбуде повертати тільки одну адресу). Оскільки записи DNS зазвичай обслуговуються в круговій формі, немає гарантій, яка точна адреса буде повернена для хостів з декількома адресами.
Я не надто знайомий з написанням функцій bash, але це має бути відносно легко перетворити це на функцію.