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

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

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

  • Augeas в сценарии оболочки
  • Рекурсивная функция не работает
  • Как исправить странное приглашение bash на сервере Debian (Squeeze)?
  • Использование CSV-строки в качестве параметров команды
  • сохранение вывода командной строки в текстовом файле?
  • Может ли любая оболочка использовать интерактивный поиск на уровне аргументов?
  • Переменная среды не расширена внутри аргумента командной строки
  • Печать последнего символа в указанном пути
  • 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` 
    Interesting Posts

    Базы данных для встроенной Linux?

    Как я могу получить обычный gcc и т. Д. Под HomeBrew под Mac OSX Mountain Lion?

    LDAP: ldapadduser – могу ли я добавить две разные группы?

    Как добавить дополнительное разрешение для моего экрана?

    Почему я получаю так много хитов, которые ищут «git» в apt cache?

    Как определить файловую систему размонтированного устройства?

    Как я могу заставить FreeBSD `patch` переносить нулевые байты?

    Как создать новый Xauthority без дома?

    Какая разница между общим использованием ЦП и использованием Процессного ЦП

    Как отредактировать раскладку Cinnamon без использования настроек Cinnamon?

    Использование! в расширении параметра

    OpenBSD 5.9 не может предварительно загружать библиотеку ''

    Как установить 32-разрядные зависимости на 64-разрядной машине с помощью dnf builddep?

    Короткая простая команда для создания группы, если она еще не существует?

    Загрузка с acpi_osi = Linux исправляет управление вентилятором, но разрывает клавиши яркости

    Linux и Unix - лучшая ОС в мире.