シェルのバックスペースはカーソルを右に移動します。

シェルのバックスペースはカーソルを右に移動します。

リモートシェルにログインして文字を削除しようとすると、削除されている文字は視覚的に表示されずに残り、カーソルが右に移動します。このシェルはBashを実行しています。

たとえば、入力しechooBackspace1回押すと、プロンプトは次のように表示されますechoo。しかし、実際には現れる文字が正しい文字( )であり、コマンドをechoクリックすると正常に実行されます。Enter

私が知る限り、これは開かれた質問とまったく同じです。ここ。 Kubernetes経由でも接続しています。私が実行するコマンドは次のとおりですkubectl -n <some_kind_of_argument> exec -it <another_argument> -- bash

他の質問を読んでみると、次の内容が有用な情報であることがわかりました。


root# echo $TERM
xterm

これは私のローカルシェル()から出力された値とは異なります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

使用しているリモートシェル/アプリケーションは、バックスペースキーが送信されると予想します^H(通常はカーソルが1セルの左に移動します)。端末)。シェル/アプリケーションは文字を削除するためにスペースを印刷します。ただし、^?通常、カーソルを移動しない(ASCII DEL、コード127)ことは予想されません。端末

ただし、実際には表示される文字が正しい(反響)、Enterキーを押すとコマンドが正常に実行されます。

質問の説明によると、シェル/アプリケーションは実際にこれを^?削除文字として扱いますが、ある意味ハードコードされている可能性があります。ただし、ハードコードされていない場合は、設定に注意を払う必要がありますstty。もしそうなら、(リモート)シェルの初期化でこれを行うことができます。

stty erase ^H

(実際の制御/ H...)その後、代わりに(または代わりControlHに送信するように端末設定を変更してください)。Backspace^H^?

関連情報