сценарий bash: Как реализовать собственный механизм истории?

Я реализую интерактивный сценарий bash, подобный клиенту MySQL, / usr / bin / mysql . В этом скрипте мне нужно использовать различные типы «команд». Мне также нужно предоставить механизм истории, с помощью которого пользователь может использовать клавиши со стрелками вверх / вниз для прокрутки введенных команд.

Фрагмент, указанный здесь ( Пример 15-6, Обнаружение клавиш со стрелками ]) делает не совсем то, что я хочу. Мне действительно нужно следующее:

  1. Клавиши со стрелками вверх / вниз должны работать в беззвучном режиме. Смысл, они не должны повторять свои коды символов на терминале.

  2. Однако другие ключи (которые будут использоваться для чтения имен команд и их аргументов) не должны работать в автоматическом режиме.

Проблема с read -s -n3 заключается в том, что он не удовлетворяет моим одновременно конфликтующим требованиям режима беззвучного режима и эхо-режима, основанного исключительно на коде символа. Кроме того, значение -n3 будет работать для клавиш со стрелками, но для других / обычных клавиш оно не «вернет управление» вызывающей программе, пока не будут использованы 3 символа.

Теперь я можно попробовать -n1 и вручную собрать ввод, по одному символу за раз (фу!). Но проблема переключения тихого / эхо-режима на основе символьного кода все равно сохранится!

Кто-нибудь пробовал это в bash? (Примечание: я не могу использовать C или другие языки сценариев, такие как Perl, Python и т. Д.)

ИЗМЕНИТЬ

Продолжая ответ Денниса ... Вам также потребуется вручную добавьте желаемые записи в свою историю с помощью history -s , например, так ...

while read -e x; do
    history -s "$x"
    # ...
done

7
задан Harry 16 February 2011 в 03:26
поделиться