Backspace 在运行 bash 脚本中不起作用

vro*_*911 8 command-line bash

我正在运行非常简单的脚本,它逐行读取并将输入的行打印回终端:

while read CMD; do
    echo $CMD
done
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我尝试编辑带有backspace字符的行时,它会打印^?而不是删除字符。当我按下Ctrl+ 时backspace,输出是^H. 如何修复此行为以backspace删除字符而不是添加这些字符?我试过stty erase '^?'命令但没有成功。

Byt*_*der 6

问题是有很多方法可以表示退格,但read命令并不能理解所有这些。您应该能够配置? Backspace在终端模拟器设置中按键时发送的确切内容。

假设您gnome-terminal用作模拟器,请打开Edit 菜单并单击Profile preference。切换到兼容性选项卡,您应该会看到以下选项:

侏儒终端? 个人资料偏好? 兼容性

现在您可以更改Backspace 键生成:设置。您可以从以下五个选项中进行选择。我在大括号中添加了它们在我的系统上的行为方式:

  • 自动(工作)
  • Control-H(^H改为打印)
  • ASCII DEL(默认,有效)
  • 转义序列(^[[3~改为打印)
  • TTY 擦除(作品)