Backspace не работает внутри запуска скрипта bash

Я запускаю очень простой скрипт, который читает строки за строкой и печатает введенную строку обратно на терминал:

while read CMD; do echo $CMD done 

Он отлично работает, но когда я пытаюсь отредактировать строку с символом backspace он печатает ^? вместо удаления символа. И когда я нажимаю Ctrl + backspace выход – ^H Как можно зафиксировать это поведение, так что backspace удаляет символ вместо добавления этих символов? Я попробовал stty erase '^?' но не успешно.

Проблема в том, что существует множество способов представления обратного пространства, но команда read не понимает их всех. Вы должны быть в состоянии настроить то, что точно отправлено при нажатии клавиши ← Backspace в настройках эмулятора терминала.

Предполагая, что вы используете gnome-terminal качестве эмулятора, откройте « Редактировать manu» и нажмите «Настройки профиля» . Перейдите на вкладку Совместимость, и вы должны получить следующие параметры:

gnome-terminal → настройки профиля → совместимость

Теперь вы можете изменить клавишу Backspace, генерируя: настройку. У вас есть следующие пять вариантов, доступных для выбора. Я добавил в фигурные скобки, как они ведут себя в моей системе:

  • Автоматический (работает)
  • Control-H (вместо этого печатает ^H )
  • ASCII DEL (по умолчанию, работает)
  • Escape sequence (печатает ^[[3~ вместо этого)
  • TTY Erase (работает)