Я ищу создание терминальной среды для адаптации моего Bash- скрипта. Я хочу, чтобы это выглядело так:
terminal
text-user-interface
В поисках меня в лесу
источник
источник
dialog
, что это, кажется, использовать.dialog
меню не отображается (но принимает подтверждение), когда оно запускается с помощью выражения подстановки команд?whiptail
>dialog
такжеtui
для своего режима разделенного окна (например, показ регистров, источника и команд)layout reg
иtui reg vec
для отображения векторных регистров в окне регистров (негибким способом, так что эта часть не очень полезна: /) IDK, если Redhat написал патч, который добавил эту функцию, или даже сколько ему летОтветы:
Ответ пользователя хранится в коде завершения, поэтому может быть напечатан как обычно:
echo $?
(обратите внимание, что0
означает «да» и1
«нет» в мире оболочки).По поводу других вопросов из раздела комментариев:
чтобы поместить в диалоговое окно вывод какой-либо команды, просто используйте механизм подстановки команд
$()
, например:чтобы дать пользователю несколько вариантов, вы можете использовать
--menu
опцию вместо--yesno
Чтобы сохранить выходные данные выбора пользователя в переменную, необходимо использовать
--stdout
параметр или изменить дескриптор вывода с помощью--output-fd
или вручную, например:Этот прием необходим, потому что
dialog
по умолчанию выводит в stderr, а не в stdout.И, как всегда,
man dialog
твой друг.источник
?
переменной, попробуйтеecho $?
.parted -l
пользователю через диалоговое окно, то, вероятно--menu
, лучше использовать вариант вместо-yesno
. В таком случае вам придется немного поиграть с дескрипторами, чтобы сохранить вывод в переменную, например:output=$(dialog --backtitle "Package configuration" --title "Configuration sun-java-jre" --menu "$(parted -l)" 15 40 4 1 "sda1" 2 "sda2" 3 "sda3" 3>&1 1>&2 2>&3 3>&-); echo $output
--stdout
опцию.man dialog
Снимок экрана в вопросе выглядит как хлыстохвост (функционально сокращенная программа, имитирующая диалог , использующий newt, а не ncurses ). Способ визуализации заголовка и кнопок встроен в каждую программу, благодаря чему они выглядят по-разному.
Вот скрипт, который дублирует оригинальный снимок экрана, либо для кнута, либо для диалога:
и для сравнения, скриншот с хлыстом:
и с диалогом:
Помимо различного вида заголовка и кнопок, в диалоговом окне по умолчанию используются разные цвета (хотя это настраивается - см. Скриншоты ), и на экране используется меньше строк.
Диалог (и whiptail) использует библиотеки для управления отображением линий, цветов и т. д. Но вы также можете увидеть тритон, используемый в программе Anaconda Red Hat в качестве общей библиотеки, вызываемой из python (с таким же внешним видом). В том же духе программа конфигурирования ядра начиналась как (урезанная) копия диалога, а затем развивалась до функций, использующих разделяемую библиотеку (без исходной
lxdialog
программы), во многом аналогично тому, как newt используется в python.Из Bash - вы можете использовать либо диалог или whiptail для наиболее часто используемых функций. Кто-то написал оболочку для них (в perl), чтобы позволить сценариям с большей готовностью использовать либо те, либо несколько других, но лучше использовать диалог напрямую, так как модуль perl по существу является общим знаменателем.
Источники диалога включают примеры всех виджетов наряду с большинством параметров командной строки:
Дальнейшее чтение:
источник
Я считаю, что пакет, который вы ищете, это ncurses .
Википедия описывает ncurses следующим образом:
Он широко используется, например, в инструменте конфигурации ядра menuconfig:
Поскольку вы используете bash, вы можете использовать Bash Simple Curses (как упомянуто Runium в комментарии ниже).
источник
ncurses
это C-библиотека. (Если я правильно понимаю) OP хочет среду сценариев (для bash).menuconfig
написан на C. В качестве альтернативыdialog
, как в другом ответе, вы могли бы упомянуть Bash Simple Curses, который написан на bash (полагаясь наtput
).ncurses
является основой этого, и он отвечает на более общую версию вопроса ... как в названии здесь :)Zenity
,
,
другие графические пользовательские интерфейсы (GUI)
останавливает дальнейшее выполнение сценария, прерывает его. строка: echo $? никогда не случится
источник