Дело в ненастроенном readline(3)
. "Мусор", который видно в терминале - это коды нажатия клавиш и их сочетаний, которым не присвоены никакие функции (чтобы увидеть коды для сочетаний клавиш, которым функции присвоены, можно нажать Ctrl+V и потом интересующее сочетание клавиш (или единичную клавишу) - для кнопки Enter, например, код будет ^M
- то есть вместо Enter в консоли можно нажимать Ctrl+M с тем же эффектом, сюрприз!). Уже назначенные на разные клавиши и их сочетания функции можно посмотреть командой bind -lpvs
.
Для sh
и bash
настройки readline
можно задать в файле .inputrc
в домашней папке пользователя. Для реализации неработающих из коробки в FreeBSD сочетаний клавиш я использую следующие настройки:
# ~/.inputrc: readline initialization file.
# (you can view all current assignments by runnig `bind -lpvs`)
# let Insert, PageUP, PageDown keys work properly in bash under FreeBSD and Linux:
"\e[2~": overwrite-mode
"\e[5~": beginning-of-history
"\e[6~": end-of-history
# let Ctrl-left-arrow and Ctrl-right-arrow jump over words:
"\e[1;5C": forward-word
"\eOC": forward-word
"\e[1;5D": backward-word
"\eOD": backward-word
Стоит отметить, что код сочетания клавиш, который можно прочесть с помощью Ctrl+V, может отличаться для разных видов терминалов - например, не совпадать в "обычном" терминале и внутри screen
. Вы можете самостоятельно расширить предлагаемый ~/.inputrc
для таких случаев.