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