ログインしているリモート シェルでは、文字を削除しようとすると、削除された文字が視覚的に表示されずに、文字はそのまま残り、カーソルが右に移動します。このシェルは Bash を実行しています。
たとえば、 と入力して1 回echoo
押すとBackspace、プロンプトは次のようになります: 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
の代わりにを使用します (または、ではなくBackspacesend に端末構成を変更します)。^H
^?