リモートシェルにログインして文字を削除しようとすると、削除されている文字は視覚的に表示されずに残り、カーソルが右に移動します。このシェルはBashを実行しています。
たとえば、入力しechoo
てBackspace1回押すと、プロンプトは次のように表示されます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
^?