Автодополнение опций

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
olecya
Сообщения: 427
ОС: debian, fedora (i3-wm)

Автодополнение опций

Сообщение olecya »

Я даже не знаю как это назвать и сформулировать вопрос в гугле. Описание следующее
Кто работал с системами от Циско знает что почти все их команды понимают усеченные опции до степени пока не появляется двусмысленность. Не сомневаюсь что разработчикам новых утилит из пакета iproute2 понравилась эта фича. Но она совсем не новая, кто работал например с gdb тоже прекрасно ее знают, а gdb не вчера создали. Я раньше думала что в системе циско не так много команд, все стандартизованы и оболочка сама ориентируется какие опции подходят по начальным буквам. Но похоже это все таки достигается силами программы самой утилиты. Значит эта возможность может быть реализована отдельным блоком, командой, библиотекой, что можно было бы пощупать. Прошу пинка в нужном направлении или помощи в опознании :)
И еще, сегодня обнаружила например что создатели iproute2 пошли дальше, их не останавливает двусмысленность. Ели она возникает то выбирается опция или по "прейскуранту" или по словарю, уж не знаю, например ip r выполняется ip route пока ip rule курит в сторонке.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18115
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Автодополнение опций

Сообщение Bizdelnick »

Не понял, в чём вопрос. Вот вся реализация, никакой магии: https://github.com/shemminger/iproute2/blob/main/lib/utils.c#L883-L895
P. S. За такой код надо руки отрубать, конечно. Это ж как можно было додуматься из функции под названием matches в случае совпадения возвращать false?
P. P. S. А в gdb какой-то ад на много тыщ строк, даже пытаться вникать желания нет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3648
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Автодополнение опций

Сообщение Hephaestus »

Вас это интересует в контексте именно Cisco или вообще?
Я, например, с подобной штукой знаком по FoxPro.
У них система команд выстроена так, что четыре знака обеспечивают уникальность.
Таким образом, любая команда может быть записана в сокращенном виде - от четырех знаков и более.
Например:
select - sele
delete - dele
replace - repl
и т.п.
Отсюда, кстати, напрашивается вывод, что вряд ли это реализовано библиотекой.
Всё-таки это имеет отношение к грамматике языка.
Ну, то есть библиотека-то может и есть, только в каждом случае своя.
У Cisco, у gdb, iproute2... у каждого из них это своё.
Потому и спрашиваю, в каком контексте это Вас интересует.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 427
ОС: debian, fedora (i3-wm)

Re: Автодополнение опций

Сообщение olecya »

Hephaestus писал:
03.09.2020 22:38
в каком контексте это Вас интересует.
Сейчас только в контексте linux. Заметила разницу с поведением в циско вот и задумалась. В циско может оно и к месту, но здесь на фоне существующего ансамбля выглядит вычурно. Думала для начала узнать название этого явления, но вот похоже в данном случае оно просто реализовано программно в проекте и ни каких гвоздей. Полистаю немного исходники и поброжу в сети, а если встретится название отпишусь.
Bizdelnick писал:
03.09.2020 22:29
Это ж как можно было додуматься из функции под названием matches в случае совпадения возвращать false?
Похоже удобное значение для одного места :) , чтобы не инвертировать, теперь это исключение из правила и если что потянется паровозик. Удачный получился каламбур, честно, это случайно
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18115
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Автодополнение опций

Сообщение Bizdelnick »

olecya писала:
03.09.2020 23:58
Похоже удобное значение для одного места
Удобным оно было, когда там был int, а не bool, и возвращался тупо результат memcmp(). Но вот взять и переделать на bool, это ж додуматься надо. Тогда бы уж возвращали true и рефакторили весь проект, если настолько свербит…
olecya писала:
03.09.2020 23:58
чтобы не инвертировать
Ага, чтобы два раза инвертировать.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 427
ОС: debian, fedora (i3-wm)

Re: Автодополнение опций

Сообщение olecya »

Ничего определяющего я не нашла. В циско это называется "функция сокращения ввода команд" и похоже устроена совершенно по своему. В linux в наборе утилит iproute2 просто нашла строчку: "Во время ввода имя объекта может быть сокращено до одной буквы. При неоднозначности используется алфавитный порядок". Ну вот хоть порядок установили.
Добавлено (00:43):
Bizdelnick писал:
04.09.2020 00:34
Ага, чтобы два раза инвертировать.
Ну они почти исправились, коментарий то оставили потомкам
Добавлено (00:51):
А ведь это код на академическом Си, что же тогда делается в вебе?
Добавлено (01:23):
По iproute много очень интересного нашла. И балансировку на 2 интерфейса и маркировку пакетов в iptables и уже на основе маркеров применение политик маршрутизации. Что-то вреде вланов. А тут все, гугли LARTC
Спасибо сказали:

Аватара пользователя
chitatel
Сообщения: 1828

Re: Автодополнение опций

Сообщение chitatel »

olecya писала:
03.09.2020 22:09
Кто работал с системами от Циско знает что почти все их команды понимают усеченные опции до степени пока не появляется двусмысленность.
А хорошо ли это?

Я с Сиськой считай не знаком, шапочно только через эмулятор PacketTracer. Но там вот такое тоже есть, вместо полной команды можно набрать, например, только по одному первому символу, допустим. Это здорово ускоряет конфигурирование, но как-то запудривает мозги.

На мой скромный взгляд, предпочтительнее явное дополнение команд типа того, что делает bash-completion - наглядно и недвусмысленно до полного прояснения.
Спасибо сказали: