我登入了一個遠端 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
而不是^?
)。