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