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

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

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

  • Вывод команды id из команды запуска с "su -c"
  • Как переименовать на фиксированную длину
  • цикл в файле с определенным расширением в сценарии оболочки дочерней папки
  • Разделение столбцов и представление значения как stdin в отдельную программу в скрипте
  • Как запустить скрипт после подключения к ssh
  • Как получить все четные строки и нечетные строки из файла и сохранить их в двух разных файлах, таких как Evenfile & Oddfile?
  • Команда не найдена при запуске с sudo bash
  • Сценарий Bash с `set -e` не останавливается на команде` ... && ... `
  • 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

    Раздел LVM + LUKS. Является ли эта архитектура зависимой или независимой?

    Сетевой драйвер Atheros

    Сохранение файлов в NTFS повреждено?

    Какой протокол / стандарт используется терминалами?

    Как поделиться папкой в ​​libvirt + qemu / kvm с гостевым Linux и хостом Linux?

    Предупреждение TIFFReadDirectory: неизвестное поле

    X Windows Заканчивается при вводе {+ <ENTER>

    Генерация пары ключей GPG: что означают знаки «плюс» и «минус»?

    Пользовательское разрешение в Fedora 11

    Невозможно публиковать IP-адрес telnet на порту 80

    Перемещение файлов, измененных после определенной даты

    Почему настройка «Мастер» работает иначе, чем установка «PCM»

    Принудительное последовательное соединение USB

    nemo: Контекстное меню Действие Запуск сценария, который заставляет выбранную символическую ссылку быть относительной

    Как этот кронаб интерпретирует «* / N * * * *», где N находится между 31 и 59?

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