Я реализую интерактивный скрипт bash, аналогичный клиенту MySQL, /usr/bin/mysql
. В этом сценарии мне нужно выполнить различные типы «команд». Мне также нужно предоставить механизм истории, посредством которого пользователь может использовать клавиши стрелок вверх / вниз для прокрутки команд, введенных до сих пор.
Фрагмент, указанный здесь ( Пример 15-6, Обнаружение клавиш со стрелками ), не совсем соответствует тому, что я хочу. Я действительно хочу следующее:
Клавиши со стрелками вверх / вниз должны работать в бесшумном режиме. Это означает, что они не должны отображать коды своих символов на терминале.
Однако остальные ключи (которые будут использоваться для чтения имен команд и их аргументов) не должны работать в режиме без вывода сообщений.
Проблема с read -s -n3
заключается в том, что он не удовлетворяет моим одновременно противоречивым требованиям режима эхо-сообщений и в режиме эха, основанном исключительно на коде символа. Кроме того, значение -n3
будет работать для клавиш со стрелками, но для других / обычных клавиш не будет «возвращать управление» вызывающей программе, пока не будут использованы 3 символа.
Теперь я могу попробовать -n1
и вручную собрать ввод, по одному символу за раз (чёрт!). Но проблема переключения тихого / эхо-режима на основе символьного кода все еще будет сохраняться!
Кто-нибудь пробовал эту вещь в bash? (Примечание: я не могу использовать C и другие языки сценариев, такие как Perl, Python и т. Д.)
EDIT
Продолжая с ответом Денниса ... Вам также необходимо вручную добавить нужные записи в историю с помощью history -s
, например ...
while read -e x; do
history -s "$x"
# ...
done