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而不是^?)。

相關內容