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

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

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

  • Преобразование данных вертикального массива в данные горизонтальных массивов
  • проверьте, успешно ли genisoimage
  • Msgstr "sudo: source: команда не найдена"
  • dirname и basename против расширения параметров
  • как вычесть первое значение из последнего в столбце по строке в оболочке?
  • Скрипт для su-c на экран не работает как предполагалось
  • Терминология для команды в Command $ (...)
  • Проверьте, работает ли процесс в привилегированном режиме
  • 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 - лучшая ОС в мире.