Существуют фундаментальные дефекты с Вашим вопросом. Во-первых, хосты могут (и вероятно будет) иметь больше чем один адрес (например, несколько интерфейсов) и даже больше чем один адрес на интерфейс. Это - еще больше проблемы с IPv6 где каждый глобально связанный хост как по крайней мере два адреса.
Во-вторых, "лучший" способ сделать это от оболочки будет варьироваться от системы до системы.
Linux:
/sbin/ip addr show eth0 | awk -F"[ /]+" '/inet / {print $3}'
> = Солярис 11:
ipadm show-addr net0/v4 | awk -F"[ /]+" '/ok/ {print $5}'
Mac OS X / Darwin:
ipconfig getifaddr en0
Даже идущий наименьший общий знаменатель и использование ifconfig
не будет последовательно, потому что выходной формат может измениться. Однако для чистки примера используйте это:
ifconfig eth0 | awk -F"[ :]+" '/inet / {print $4}'
При использовании более необычного языка как жемчуг, рубин, Java, и т.д., вместо оболочки, каждый язык будет поступать по-своему получения этих данных из ядра. Я оставлю нахождение этого до Вас.
Пока системные вызовы существуют в самом ядре, версия используемого coreutils не имеет значения. И coreutils не использует никого экзотичного (для Linux) системные вызовы, таким образом, Вы, вероятно, не столкнетесь ни с какими несовместимыми утилитами.
Однако захватите SRPM, замените tarball внутри, восстановите его, и использование это вместо этого.
Трудно знать, и Вы не можете получить гарантию. Например, в какой-то момент, некоторые версии GNU head
/tail
остановленная поддержка head -1
(вариант устаревший head -n 1
) то, чтобы заставлять много сценариев повредиться (они были восстановлены позже).
Вы найдете, что были удалены некоторые опции устаревшие. Например, GNU touch
не имеет a --file
опция больше. Обычно это было бы маловероятно, чтобы они использовались, но Вы никогда не будете знать, пока Вы не столкнетесь с проблемой.