Эффективный способ получить ваш IP-адрес в сценариях оболочки

Контекст: В системах * nix можно получить IP-адрес машины в оболочке script следующим образом:

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-адрес для использования в оболочке script?

(мои извинения * пользователям BSD и Solaris, так как приведенная выше команда может не работать, я не смог протестировать)

Ответ 1

вы можете сделать это только с помощью одной команды awk. Не нужно использовать слишком много труб.

$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'

Ответ 2

вы даете прямой интерфейс, тем самым уменьшая один grep.

ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'

Ответ 3

На основе этого вы можете использовать следующую команду

ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'

Ответ 4

Посмотрите на руководство Beej на network, чтобы получить список сокетов с помощью простой программы C для печати IP-адресов с помощью getaddrinfo(...) вызов. Эта простая C-программа может использоваться в части оболочки script, чтобы просто распечатать IP-адреса, доступные для stdout, что было бы проще сделать, а затем полагаться на ifconfig, если вы хотите оставаться переносимым в качестве вывода ifconfig может меняться.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Ответ 5

ifconfig | grep 'broadcast\| Bcast' | awk -F '' {'print $2'} | head -n 1 | sed -e 's/addr://g'

Ответ 6

Возможно, это поможет.

 more /etc/hosts | grep `hostname` | awk '{print $1}'

Ответ 7

# for bash/linux
ipaddr(){
if="${1:-eth0}"
result=$(/sbin/ip -o -4 addr show dev "${if}" | sed 's/^.*inet // ; s/\/...*$//')
printf %s "${result}"
tty -s  && printf "\n"
}