Я запускаю очень простой скрипт, который читает линию за линией и печатает вводимую строку назад к терминалу:
while read CMD; do
echo $CMD
done
Это хорошо работает, но когда я пытаюсь отредактировать строку с backspace
символ это печатает ^?
вместо того, чтобы удалить символ. И когда я нажимаю Ctrl
+ backspace
вывод ^H
. Как это поведение могло быть зафиксировано так backspace
удаляет символ вместо того, чтобы добавить эти символы? Я попробовал stty erase '^?'
команда, но не успешно.
Проблема состоит в том, что существует много способов представить клавишу Backspace, но эти read
команда не понимает всех их. Необходимо смочь настроить то, что точно отправляется при нажатии в†ђ Клавиши Backspace вводят настройки эмулятора терминала.
Принятие Вы используете gnome-terminal
в качестве эмулятора, открываете Редактирование manu и нажимаете Profile на предпочтения . Переключитесь на вкладка Compatibility , и необходимо получить эти опции:
Теперь можно измениться , клавиша Backspace генерирует: установка. У Вас есть эти пять опций ниже доступного, выбрал из. Я добавил в фигурных скобках, как они ведут себя в моей системе:
^H
вместо этого) ^[[3~
вместо этого) У меня была та же проблема, использование избивают Терминал Gnome.
Обратите внимание, что на командной строке, клавиша Backspace работает как ожидалось, но когда моя программа (простой основанный на сокете TCP клиент чата) читает из stdin, backspace
символьная печать (реагирует на экран), ^?
вместо того, чтобы удалить последний знак.
Использовать # stty icanon
позволить "канонический (приготовленный) режим". Посмотрите некоторое объяснение здесь https://unix.stackexchange.com/questions/131105/how-to-read-over-4k-input-without-new-lines-on-a-terminal
Еще некоторые предпосылки к моей проблеме/решению: у Меня была проблема, где я должен вставить больше, чем 4k символы. И во время того исследования, я велся к вышеупомянутой ссылке. Я использовал # stty -icanon
отключить предел 4k, но потеряло способность использовать клавишу Backspace (стирание).