shell 中的退格键将光标向右移动

shell 中的退格键将光标向右移动

我登录了一个远程 shell,当我尝试删除一个字符时,它不会直观地显示正在删除的字符,而是保留在那里,并且光标向右移动。该 shell 正在运行 Bash。

例如,如果我键入echoo并按Backspace一次,提示将如下所示:echoo。然而,实际上,出现的字符将是正确的(echo),并且如果我点击Enter该命令,则运行正常。

据我所知,这与打开的问题完全相同这里。我也通过 Kubernetes 进行连接。我运行的命令看起来像kubectl -n <some_kind_of_argument> exec -it <another_argument> -- bash.

通过阅读其他问题,我发现以下是有用的信息。


root# echo $TERM
xterm

这与我的本地 shell ( ) 输出的值不同xterm-256color。以下内容并不能解决该问题。

root# export TERM=xterm-256color

现在我分享一下输出stty -a

root# stty -a
speed 38400 baud; rows 43; columns 118; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

现在,按Ctrl+v然后按Backspace显示:

root# ^?

这似乎与上面的输出一致 ( erase = ^?)。在上面的提示中按 Enter 键打印。 。 。

bash: $'\177': command not found

我也跑了stty sane,但这没有帮助。


有人可以帮我解决这个问题并希望也能帮助我了解发生了什么吗?

答案1

您正在使用的远程 shell/应用程序期望发送退格键^H(这通常会将光标向左移动一个单元格)终端)。 shell/应用程序打印一个空格来删除该字符。但它不期望^?(ASCII DEL,代码127),它通常不会在a中移动光标终端

然而,实际上,出现的字符将是正确的(回显),并且如果我按 Enter 键,命令将正常运行。

问题中的评论确实说 shell/应用程序实际上将其视为^?擦除字符,但在某种意义上它可能是硬编码的。但如果不是硬编码的话,可能要注意一下设置stty。如果是这样,您可以在(远程)shell 初始化中执行此操作

stty erase ^H

(真正的控制/ H...)然后使用ControlH, 代替Backspace(或更改您的终端配置以发送^H而不是^?)。

相关内容