在 bash 命令行上使用 BackSpace 擦除字符

在 bash 命令行上使用 BackSpace 擦除字符

我有 bash 和配置文件的配置,但我将该文件复制到其他服务器,所以现在我无法仅通过按退格键来删除文本,我需要按 Shift + Backspace 来删除文本。

我需要更改什么参数才能恢复它?

答案1

一般情况下(取决于惯例对于您正在使用的特定系统),该backspace键发送 ASCII BS ( ^H) 和 DEL ( ^?)

当您使用移位修饰符时,某些终端仿真器会在 ASCII BS ( ^H) 和 DEL ( ) 之间切换。^?有些则不然。显然您用于 ssh 的程序没有。

鉴于您的这一行.profile

stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z"

看起来你的终端通常会发送^?(ASCII DEL),但你告诉它期待^H(ASCII BS)。但是,^H当您backspace使用该键进行修改时,您的终端会切换到shift。你本来可以用

stty erase "^?" kill "^U" intr "^C" eof "^D" susp "^Z"

并取得了更好的结果。

答案2

我感觉没有一个一刀切的解决方案。以下内容为我修复了 gnome-terminal (2.31.3) 中 bash 4.1 中的问题:

stty sane

参考:来源

答案3

另一种可能性是 terminfo 数据丢失。这在我使用 chroot 时发生过。这论坛帖子帮助我解决了这个问题,但我在 Stackexchange 上找不到类似的有效参考,所以就在这里。

将目录 /usr/share/terminfo/ 复制到 chroot 目录的 /usr/share/terminfo 就足够了。

相关内容