Контекст: На *отклоняют системы, можно получить IP-адрес машины в сценарии оболочки этот путь:
ifconfig | grep 'inet' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'
Или это слишком:
ifconfig | grep 'inet' | grep -v '127.0.0.1' | awk '{print $2}' | sed 's/addr://'
Вопрос: был бы более простой, все еще портативный, способ получить IP-адрес для использования в сценарии оболочки?
(мои извинения *BSD и Пользователи Solaris как вышеупомянутая команда не могут работать; я не мог протестировать),
вы можете сделать это с помощью всего одной команды awk. Не нужно использовать слишком много труб.
$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'
вы предоставляете прямой интерфейс, тем самым сокращая один grep.
ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'
Посмотрите руководство Beej по сетям , чтобы получить список сокетов, используя простую программу C для распечатки IP-адресов с помощью getaddrinfo ( ...)
звонок. Эту простую программу на C можно использовать как часть сценария оболочки, чтобы просто распечатать IP-адреса, доступные для stdout
, что было бы проще сделать, а затем полагаться на ifconfig
, если вы хотите оставаться переносимым, так как вывод ifconfig
может отличаться.
Надеюсь, это поможет, С уважением, Том.