Как создать меню в сценарии оболочки, которое будет отображать 3 параметра, которые пользователь будет использовать клавиши со стрелками для перемещения курсора выделения и нажмите Enter, чтобы выбрать один?
shell
shell-script
menu
Mrplow911
источник
источник
tput
, но я думаю, что первое невозможно), но вы можете создавать простые меню в bash с помощьюselect
: tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_06.htmldialog
пакет, который создает базовые интерфейсы терминала faux-GUI в скриптах.Ответы:
Диалог - отличный инструмент для того, чего вы пытаетесь достичь. Вот пример простого меню с 3 вариантами выбора:
Синтаксис следующий:
Выбор будет отправлен
stderr
. Вот пример сценария с использованием 3 цветов.В Debian, вы можете установить с
dialog
помощью пакета одного и того же имени .источник
Вот чистое
bash
решение сценария в формеselect_option
функции, основанное исключительно на escape-последовательностях ANSI и встроенномread
.Работает на Bash 4.2.45 на OSX. Фанки части , которые могут не работать одинаково хорошо во всех средах , от всего я знаю , являются
get_cursor_row()
,key_input()
(для обнаружения вверх / вниз клавиши) иcursor_to()
функции.Вот пример использования:
Вывод выглядит так, как показано ниже, с выбранным в данный момент параметром, выделенным с помощью обратной раскраски ANSI (трудно передать здесь в уценке). Это может быть адаптировано в
print_selected()
функции при желании.Обновление: вот небольшое расширение,
select_opt
обертывающее вышеуказаннуюselect_option
функцию, чтобы упростить его использование вcase
выражении:Пример использования с 3 буквенными опциями:
Вы также можете смешивать, если есть некоторые известные записи (в этом случае Да и Нет), и использовать код выхода
$?
для случая с подстановочными знаками:источник