Назначение IP-адреса переменной окружения

Как я могу назначить IP-адрес eth0 переменной окружения, например $ ip, как можно проще?

Обновление: Distro – Ubuntu Server 12.04 LTS.

  • Не удается разрешить все имена после подключения к VPN
  • Где последний исходный код команды man для linux?
  • Утилита, которая дает строку из / proc / id / maps по конкретному адресу
  • Конфликт между `pushd .` и` cd -`
  • Вилка против клона на 2.6 ядра Linux
  • Как создать новый раздел на жестком диске?
  • Как включить службу systemd без ожидания?
  • Как перезапустить скрипт Python автоматически, если он убит или умирает
  • Как настроить устройство обратной связи видео4linux
  • Cap Lock не работает на консоли Linux
  • Существуют ли дополнительные способы защиты SSH-соединений, помимо брандмауэра и RSA-ключей?
  • Легкая утилита / программа для запуска команды после случайной задержки
  • 7 Solutions collect form web for “Назначение IP-адреса переменной окружения”

    Чем короче (и я нахожу более аккуратным) путь – это hostname -i . Больше никаких проблем с ipconfig, ip, sed, awk и т. Д.

    Использование ip address show – это путь. Особенно в любой современной Linux-системе, где интерфейс, который вы запрашиваете, может иметь несколько адресов, о которых ifconfig не знал.

     $ ip as eth0 | awk '/inet / {print$2}' 10.13.211.83/24 192.168.17.21/16 

    И, конечно, если вы не хотите, чтобы сетевая маска была просто подключена к любому количеству вещей, например:

     cut -d/ -f1 

    Примечание. В той же системе ifconfig показывает:

     $ ifconfig em1 | awk '/inet / {print $2}' 10.13.211.83 

    Не отвечайте на вашу конкретную проблему, так как вы хотите, чтобы IP назначался определенному интерфейсу, но я подумал, что было бы полезно указать здесь для будущей информации способ иметь внешний IP (даже если за NAT):

     ip=`wget -qO- ipecho.net/plain` 

    Попробуйте сделать это:

     ip=$( ifconfig eth0 | perl -ne 'print $1 if /inet\s.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/' ) echo "$ip" 

    Как вы можете видеть, hostname -i может показать 127.0.0.1 (здесь нет NAT (archlinux)), это не то, что мы хотим.

    Поэтому я предлагаю:

     dev=eth0 ip=$( ip as dev $dev | awk '/inet /{gsub("/.*", "");print $2}' ) echo "$ip" 

    Или если у вас есть переключатель -P для grep :

     ip as dev eth0 | grep -oP 'inet\s+\K[^/]+' 

    Я думаю, это самое короткое решение =)

    Проверьте также:

    ifconfig eth0 | awk '/inet /{print $2}' | cut -f2 -d':'

    который будет работать даже в Solaris и HP-UX (используйте соответствующий сетевой dev вместо eth0 ).

    Что касается команды hostname -i , попробуйте hostname -I если у вас есть один сконфигурированный интерфейс (кроме loopback).

    Йон также может попробовать это,

     IP=`wget -q -O- http://checkip.dyndns.org/index.html | grep 'IP'| html2text | cut -c 21-36` 
    Linux и Unix - лучшая ОС в мире.