По работе мне пришлось недавно делать консольное меню для того, чтобы конфигурировать сервера в более менее удобном для обычного пользователя (не админа и не программиста) интерфейсе (заставлять их лезть в с помощью vim в конфиги radius и требовать за такой продукт деньги было бы издевательством). Кстати, оно чем-то похоже на меню, как в make menuconfig.Под катом информация откуда взять и как использовать.Состояние и исходники проектаСейчас оно в рабочем состоянии, но состояние кода непричёсанное, многое нужно и можно зарефакторить, нужны некоторые плюшки и так далее. На него было потрачено достаточно много моего и не только времени, поэтому было бы обидно, если бы этот скрипт использовался в двух-трёх проектах нашей компании и не более. К тому же делать это проприетарным глупо - ISO’шки наших дистров скачать можно без ограничений и бесплатно, немного почитать код и выполнить два which - не так уж долго.Можете склонировать к себе из репозитория на гитхабе и использовать на своё усмотрение: https://github.com/hordecore/dialog_menuДокументацияИмеется небольшая wiki, в которой описаны доступные виджеты и то, как вообще оно устроено (хотя на мой взгляд лучше всего - посмотреть в конфиг Carbon AS приложенный в репозиторий и действовать по аналогии):https://github.com/hordecore/dialog_menu/wikiЖелающим использовать я лично помогу разобраться как оно работает. Буду очень рад видеть ваши форки и Pull Request’ы, либо по крайней мере комментарии здесь.

Что хочется сделать в первую очередь

1. Добиться упорядочивания элементов

Из-за того, что сейчас данные из конфига получаются с помощью строчек типа:for key in ${!item[@]}; doпроисходит перемешивание элементов меню, то есть при отрисовке они располагаются в случайном порядке. Есть идея как это залечить - вместо for выше использовать следующую конструкцию:while read line; do                IFS=’=’ read var value «< $(echo “$line”)                cmd=$cmd+что_там_ещёdone «< “$(grep “^то_что_нужно” config)”но никак не найду время на эксперименты.

2. Что-то сделать с кучей дублирующегося кода.

Особенно он заметен если сделать:grep local menuНаверное стоит сделать функцию в духе generic_show_init