我正在运行非常简单的脚本,它逐行读取并将输入的行打印回终端:
while read CMD; do
echo $CMD
done
它工作正常,但是当我尝试编辑带有backspace
字符的行时,它会打印^?
而不是删除字符。当我按Ctrl
+时backspace
,输出是^H
。如何修复此行为,以便backspace
删除字符而不是添加这些字符?我尝试了stty erase '^?'
命令,但没有成功。
答案1
答案2
我在 Gnome-Terminal 中使用 bash 时遇到了同样的问题。
请注意,在命令行上,退格键按预期工作,但是当我的程序(一个基于 TCP 套接字的简单聊天客户端)从 stdin 读取时,backspace
会打印字符(回显到屏幕)^?
而不是删除最后一个字符。
用于# stty icanon
允许“规范(熟)模式”。请参阅此处的一些解释https://unix.stackexchange.com/questions/131105/how-to-read-over-4k-input-without-new-lines-on-a-terminal
关于我的问题/解决方案的更多背景信息:我遇到了一个问题,需要粘贴超过 4k 个字符。在研究过程中,我被引导到上面的链接。我曾经# stty -icanon
禁用过 4k 限制,但失去了使用退格键(擦除)的能力。