LINUX.ORG.RU

Объявить переменную из выводы
Как объявить переменную выводом ifconfig | grep 'eth0' ?

Тов. Hi, извините, какой ваш родной язык?

(Только не надо понимать этот вопрос как оскорбление, его здесь нет.)

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Заради неумножения сущностей, я думаю.

Налицо непонимание сущностей. Имена интерфейсов делаются без спец символов именно потому, чтобы не создавать неудобств при их обработки из скриптов. Своим экранированием вы эти сущности и умножаете.

А если ещё немного занудно поворчать, то отсуствие у ipconfig или у ip addr отдельного ключа, показывающего первый (и отдельным - все) адрес на интерфейсе в нужном протоколе (4/6) - давнее отсутствие сущности, которое многих раздражает, но ничего не меняется.

Как следствие, вышепреведеный скрипт ничего путного и не даёт.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 3)

Просто мысль, что если смотреть интересующие параметры в /sys/class/net - вот конкретно там список активных интерфейсов виден, включая алиасы (или как это зовется).

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от vodz

Налицо непонимание сущностей.

Да ну?

Имена интерфейсов делаются без спец символов именно потому, чтобы не создавать неудобств при их обработки из скриптов.

Вообще не понял. Перефразируйте, пожалуйста.

Своим экранированием вы эти сущности и умножаете.

Ой-ой? То есть есть избавление от оговорки «кроме присвоения» — это у нас умножение сущностей?

А если ещё немного занудно поворчать, то отсуствие у ipconfig
ipconfig

ifconfig, вы хотели сказать? Ее вывод в принципе не предназначен для машинного разбора.

или у ip addr отдельного ключа, показывающего первый (и отдельным - все) адрес на интерфейсе в нужном протоколе (4/6) - давнее отсутствие сущности, которое многих раздражает, но ничего не меняется

Почему вас это раздражает?

$ IFS+='/' read _n _dev _family addr mask __ < <(ip -o -4 addr show dev wlan0 scope global)
$ echo "$addr"
192.168.1.146
Zmicier ★★★★★
()

Личто я всегда делал так:

A=`ifconfig | grep eth0`

Pyzia ★★★★★
()
Ответ на: комментарий от Zmicier

Да ну?

Ну да.

Вообще не понял. Перефразируйте, пожалуйста.

Бывает.

Перефразируйте, пожалуйста.

Сущность специально сделана для работы без дополнительного привнесения сущностей - экранирования.

Ее вывод в принципе не предназначен для машинного разбора.

О чём и речь. Для машинного разбора нет специальной опции показать только адрес, первый/все. Трудно? Да нисколечки.

Почему вас это раздражает?

Потому что это кривой скрипт. Не верите? Ну попробуйте для алиаса eth0:1 .

vodz ★★★★★
()
Ответ на: комментарий от vodz

несколько не пони, как это должно быть сделано в общем случае. Вот, к примеру, интерфейс:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 74:d4:35:5c:6c:0c brd ff:ff:ff:ff:ff:ff
    inet 192.168.41.55/24 brd 192.168.41.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.2.238/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.44.55/24 brd 192.168.44.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::76d4:35ff:fe5c:6c0c/64 scope link 
       valid_lft forever preferred_lft forever
ни один не назначен алиасу. Кто «первый» из них?

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

А что, оно при следующем показе их перемешает случайно? И вообще удобства такого не понимаю. Ни src-рутинг, ни даже ping -I не сделаешь. Оно хоть поменять адрес даст атомарно?

vodz ★★★★★
()
Ответ на: комментарий от vodz

при показе - нет, но вообще порядок не гарантируется. После изменений он может поменяться.

Ни src-рутинг

чойта? Правила src работают с адресами

ни даже ping -I

       -I interface
              interface  is  either  an address, or an interface name.

Оно хоть поменять адрес даст атомарно?

одной командой - нет.

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

но вообще порядок не гарантируется.

Ну и нафиг такое надо, даже если такое на самом деле есть?

чойта? Правила src работают с адресами

Хм, вообще-то маршрутизация - это в какой интерфейс отправлять.

Короче, сделано ради прикола, а теперь наблюдаю типичное: что раз дядя так сделал, то сделано правильно и удобно. Ну да, ну да...

vodz ★★★★★
()
Ответ на: комментарий от vodz

Ну и нафиг такое надо, даже если такое на самом деле есть?

а нафига там нужен порядок? адреса равноправны.

вообще-то маршрутизация - это в какой интерфейс отправлять.

src тут причем?

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

а нафига там нужен порядок?

Чтобы сделать eth0:1 down или поменять (атомарно!) маску и т п.

src тут причем?

Есть такая маршутизация :) src там у пакетов.

И вообще, к обсуждаемому вопросу это всё отношение не имеет. Если у интерфейса так уж сделали всем назло несколько адресов без алиасов, значить вот все и надо выводить как один. А у алиасов - отдельно. Но ведь нет же. Смысл время терять целый день доказывая что-то совсем перпендикулярное?

vodz ★★★★★
()
Ответ на: комментарий от vodz

Есть такая маршутизация :) src там у пакетов.

я в курсе. Как это связано с «маршрутизация - это в какой интерфейс отправлять»?

Если у интерфейса так уж сделали всем назло несколько адресов без алиасов, значить вот все и надо выводить как один. А у алиасов - отдельно. Но ведь нет же.

тут какая штука: весьма давно (еще с бородатых времен 2.Х) алиасов как бы и нет там внутри. Теперь это label для адреса. В целях совместимости до сих пор тянется работа с метками вида «интерфейс:число» как со старыми алиасами. По меткам адреса выводить можно

arkhnchul@tween-arkhost:~$ ip a l dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 74:d4:35:5c:6c:0c brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.238/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.44.55/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.45.55/24 brd 192.168.45.255 scope global eth0:1
       valid_lft forever preferred_lft forever
    inet6 fe80::76d4:35ff:fe5c:6c0c/64 scope link 
       valid_lft forever preferred_lft forever

arkhnchul@tween-arkhost:~$ ip a l label eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 74:d4:35:5c:6c:0c brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.238/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.44.55/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::76d4:35ff:fe5c:6c0c/64 scope link 
       valid_lft forever preferred_lft forever

arkhnchul@tween-arkhost:~$ ip a l label eth0:1
    inet 192.168.45.55/24 brd 192.168.45.255 scope global eth0:1
       valid_lft forever preferred_lft forever

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

я в курсе.

Не похоже.

Как это связано с «маршрутизация - это в какой интерфейс отправлять»?

Я говорил об организации source-рутинга, например, при двух uplink. Тогда можно биндить некоторые программы на интерфейс. Так как адреса могут меняться, скажем динамически, а интерфейсы в конфигурации будут меняться крайне редко. Потому это удобно, один интерфейс, пусть и виртуальный - один адрес.

тут какая штука: весьма давно

Боже, да при чём тут это всё?! Речь была вообще о том, что у команд нет тривиального ключика для ifconfig и опции для команды ip, чтобы оно вывело на стандартный вывод адреса с этим именем интерфейса. Это скорее всего и надо ТСу. Для нескольких адресов и алиасов как оно должно выводить - обсуждаемо и дело десятое.

vodz ★★★★★
()
Ответ на: комментарий от beastie

уже не в моде

Между прочим, это какой-то позор. На одном хосте:

host1 $ ifconfig --version
net-tools 1.60
ifconfig 1.42 (2001-04-13)
host1 $ ifconfig | grep 'eth0'
eth0      Link encap:Ethernet  HWaddr 00:30:48:d1:57:70
На другом:
host2 $ ifconfig --version  
net-tools 1.60
ifconfig 1.42 (2001-04-13)
host2 $ ifconfig | grep 'eth0'
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
eth0.2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
Так что тут не до моды, неожиданный песец подкрался незаметно...

vodz ★★★★★
()
Ответ на: комментарий от beastie

И?

Что «И?» Версия типа одна и та же (хотя между дистрибутивами чуть ли не десяток лет), выводит разное, интерфейс указан, а интересует всех обычно ipv4-адрес :) В данном случае меня ничего не интересовало, просто проверил и очередной раз ужаснулся, нафига так сделали. Ладно было б возможно из /proc(sys) где вынуть...

vodz ★★★★★
()
Ответ на: комментарий от vodz

Я говорил об организации source-рутинга, например, при двух uplink

source policy routing вполне себе делается на уровне адресов

один интерфейс, пусть и виртуальный - один адрес

виртуальных интерфейсов есть на выбор. Для описываемого случая, когда нужен именно интерфейс - macvlan, у него и MAC свой будет.

Боже, да при чём тут это всё?!

дыг разговор зашел про алиасы, множества адресов и «какого хрена».

Речь была вообще о том, что у команд нет тривиального ключика для ifconfig и опции для команды ip, чтобы оно вывело на стандартный вывод адреса с этим именем интерфейса

еще ключика для маски, ключика для состояния линка, ключика для MAC-а, ключика для MTU... правильно понимаю? Для парсинга есть -o

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

source policy routing вполне себе делается на уровне адресов

Вы достали уже, тупо долбите какие-то прямолинейные мысли, скипая объяснения, почему собственно были такие примеры. Вы русский язык понимаете? Знаете значение слова «удобнее»?

еще ключика для маски, ключика для состояния линка, ключика для MAC-а, ключика для MTU... правильно понимаю?

Правильно. Есть куча утилит с таким же подходом. Скажем - date. Показывает по умолчанию в человекочитаемом виде, но имеет опцию для задания формата, если вас интересует только количество секунд (и не важно, что это с точки зрения текущего времени бессмысленно), то это можно отдельно заказать на вывод. Такой подход самый правильный, так как позволяет не забивать навсегда гвоздями формат: адрес находится в четвертом поле причём 3 поле отделено табуляцией. Ну дурдом же.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)

В простых случаях достаточно

hostname -i

ashot ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.