Die Rücktaste in der Shell bewegt den Cursor nach rechts.

Die Rücktaste in der Shell bewegt den Cursor nach rechts.

Es gibt diese Remote-Shell, bei der ich mich anmelde. Wenn ich versuche, ein Zeichen zu löschen, wird das gelöschte Zeichen nicht visuell angezeigt, sondern bleibt dort und der Cursor bewegt sich nach rechts. Diese Shell führt Bash aus.

Wenn ich beispielsweise einmal eingebe echoound drücke Backspace, sieht die Eingabeaufforderung folgendermaßen aus: echoo. In Wirklichkeit sind die vorhandenen Zeichen jedoch korrekt ( echo), und wenn ich drücke, Enterwird der Befehl problemlos ausgeführt.

Soweit ich das beurteilen kann, ist es genau dasselbe Problem, das geöffnet wurdeHier. Auch ich verbinde mich über Kubernetes. Der Befehl, den ich ausführe, sieht ungefähr so ​​aus kubectl -n <some_kind_of_argument> exec -it <another_argument> -- bash:

Aus dem Lesen anderer Fragen entnehme ich, dass die folgenden Informationen nützlich sind.


root# echo $TERM
xterm

Dies ist nicht derselbe Wert, der von meiner lokalen Shell ( xterm-256color) ausgegeben wird. Das Folgende behebt das Problem nicht.

root# export TERM=xterm-256color

Jetzt teile ich die Ausgabe von 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

Wenn Sie nun Ctrl+ vund anschließend drücken Backspace, wird Folgendes angezeigt:

root# ^?

Dies scheint mit der obigen Ausgabe übereinzustimmen ( erase = ^?). Wenn Sie in der obigen Eingabeaufforderung die Eingabetaste drücken, wird Folgendes gedruckt: . .

bash: $'\177': command not found

Ich bin auch gerannt stty sane, aber das hat nichts geholfen.


Kann mir jemand helfen, das Problem zu beheben und mir hoffentlich auch helfen zu verstehen, was los ist?

Antwort1

Die Remote-Shell/Anwendung, die Sie verwenden, erwartet die Rücktaste zum Senden ^H(was normalerweise den Cursor eine Zelle nach links bewegt in einemTerminal). Die Shell/Anwendung druckt ein Leerzeichen, um das Zeichen zu löschen. Aber sie erwartet nicht ^?(ASCII DEL, Code 127), was den Cursor im Allgemeinen nicht in einemTerminal.

In Wirklichkeit sind die vorhandenen Zeichen jedoch korrekt (Echo) und wenn ich die Eingabetaste drücke, wird der Befehl einwandfrei ausgeführt.

Der Kommentar in der Frage besagt zwar, dass die Shell/Anwendung es tatsächlich ^?als Löschzeichen behandelt, aber in gewisser Weise kann es fest codiert sein. Aber wenn es nicht fest codiert ist, achtet es möglicherweise auf die sttyEinstellung. Wenn dies der Fall ist, können Sie dies in Ihrer (Remote-)Shell-Initialisierung tun.

stty erase ^H

(ein echtes Steuerelement/ H…) und verwenden Sie dann ControlH, anstelle von Backspace(oder ändern Sie Ihre Terminalkonfiguration so, dass gesendet wird ^Hstatt ^?).

verwandte Informationen