Я даже не знаю как это назвать и сформулировать вопрос в гугле. Описание следующее
Кто работал с системами от Циско знает что почти все их команды понимают усеченные опции до степени пока не появляется двусмысленность. Не сомневаюсь что разработчикам новых утилит из пакета iproute2 понравилась эта фича. Но она совсем не новая, кто работал например с gdb тоже прекрасно ее знают, а gdb не вчера создали. Я раньше думала что в системе циско не так много команд, все стандартизованы и оболочка сама ориентируется какие опции подходят по начальным буквам. Но похоже это все таки достигается силами программы самой утилиты. Значит эта возможность может быть реализована отдельным блоком, командой, библиотекой, что можно было бы пощупать. Прошу пинка в нужном направлении или помощи в опознании
И еще, сегодня обнаружила например что создатели iproute2 пошли дальше, их не останавливает двусмысленность. Ели она возникает то выбирается опция или по "прейскуранту" или по словарю, уж не знаю, например ip r выполняется ip route пока ip rule курит в сторонке.
Не понял, в чём вопрос. Вот вся реализация, никакой магии: https://github.com/shemminger/iproute2/blob/main/lib/utils.c#L883-L895
P. S. За такой код надо руки отрубать, конечно. Это ж как можно было додуматься из функции под названием matches в случае совпадения возвращать false?
P. P. S. А в gdb какой-то ад на много тыщ строк, даже пытаться вникать желания нет.
Вас это интересует в контексте именно Cisco или вообще?
Я, например, с подобной штукой знаком по FoxPro.
У них система команд выстроена так, что четыре знака обеспечивают уникальность.
Таким образом, любая команда может быть записана в сокращенном виде - от четырех знаков и более.
Например:
select - sele
delete - dele
replace - repl
и т.п.
Отсюда, кстати, напрашивается вывод, что вряд ли это реализовано библиотекой.
Всё-таки это имеет отношение к грамматике языка.
Ну, то есть библиотека-то может и есть, только в каждом случае своя.
У Cisco, у gdb, iproute2... у каждого из них это своё.
Потому и спрашиваю, в каком контексте это Вас интересует.
Пускай скрипят мои конечности.
Я - повелитель бесконечности... Мой блог
Сейчас только в контексте linux. Заметила разницу с поведением в циско вот и задумалась. В циско может оно и к месту, но здесь на фоне существующего ансамбля выглядит вычурно. Думала для начала узнать название этого явления, но вот похоже в данном случае оно просто реализовано программно в проекте и ни каких гвоздей. Полистаю немного исходники и поброжу в сети, а если встретится название отпишусь.
Это ж как можно было додуматься из функции под названием matches в случае совпадения возвращать false?
Похоже удобное значение для одного места , чтобы не инвертировать, теперь это исключение из правила и если что потянется паровозик. Удачный получился каламбур, честно, это случайно
Удобным оно было, когда там был int, а не bool, и возвращался тупо результат memcmp(). Но вот взять и переделать на bool, это ж додуматься надо. Тогда бы уж возвращали true и рефакторили весь проект, если настолько свербит…
Ничего определяющего я не нашла. В циско это называется "функция сокращения ввода команд" и похоже устроена совершенно по своему. В linux в наборе утилит iproute2 просто нашла строчку: "Во время ввода имя объекта может быть сокращено до одной буквы. При неоднозначности используется алфавитный порядок". Ну вот хоть порядок установили.
Ну они почти исправились, коментарий то оставили потомкам
Добавлено (00:51):
А ведь это код на академическом Си, что же тогда делается в вебе?
Добавлено (01:23):
По iproute много очень интересного нашла. И балансировку на 2 интерфейса и маркировку пакетов в iptables и уже на основе маркеров применение политик маршрутизации. Что-то вреде вланов. А тут все, гугли LARTC
Кто работал с системами от Циско знает что почти все их команды понимают усеченные опции до степени пока не появляется двусмысленность.
А хорошо ли это?
Я с Сиськой считай не знаком, шапочно только через эмулятор PacketTracer. Но там вот такое тоже есть, вместо полной команды можно набрать, например, только по одному первому символу, допустим. Это здорово ускоряет конфигурирование, но как-то запудривает мозги.
На мой скромный взгляд, предпочтительнее явное дополнение команд типа того, что делает bash-completion - наглядно и недвусмысленно до полного прояснения.