Вопрос по bash, keyboard – Как мне прочитать один ключ в Bash?

3

я могу получитьread -n 1 KEY получить большинство ключей, за исключением ключей, которые представлены несколькими символами. Например, если я нажму клавишу со стрелкой вверх:

$ read -n 1; echo
^[[A
$ [A

Как вы видете,read только беретEsc и[A осталось

То, что я хочу иметь в сценарии, это:

Go through a list with the arrow keys and press Enter to do something with it For other actions, press different keys.
Ncurses - это библиотека для создания таких консольных интерфейсов:stackoverflow.com/questions/7876008/… Rafał Rawicki

Ваш Ответ

2   ответа
8

Вам лучше использовать диалоговое окно, как упомянуто jm666, но есть и другие способы обрезать эту кошку.

read -n 1 x; while read -n 1 -t .1 y; do x="$x$y"; done

В основном, ждите, пока вы не прочитаете символ, а затем вращаете потребляющий ввод, пока не пройдет 0,1 секунды без ввода.

Предупреждение, быстрые машинистки могут раздражаться. Вам может понадобиться настроить этот тайм-аут.

Тайм-аут 0,01, кажется, работает для меня. biggles5107
@ bi99l35: Я полагаю, 2400 бод коммутируемых подключений довольно редки, так что это должно быть безопасно.
Это не работает для меня (linux), когда символом является Ввод, Пробел или Вкладка. Это работает для Backspace и даже Esc, хотя.
По-прежнему не очень хорошо, когда вы копируете и вставляете текст. Тогда тайм-аут не достаточно быстр, чтобы обнаружить это. Мы должны использовать terminfo, чтобы выяснить, есть ли у нас под рукой нажатие многобайтовой клавиши.
3

Не прямой ответ на ваш вопрос - но путь решения:

Вы, вероятно, должны проверить & quot; диалоговое окно & quot; утилита для создания & ncurses & quot; (ориентированные на экран) диалоговые окна из оболочки. увидеть:http://hightek.org/dialog/

Google создайте несколько примеров или проверьте:http://unstableme.blogspot.sk/2009/12/linux-dialog-utility-short-tutorial.html

Похожие вопросы