Backspace,Tab 在终端中不起作用(使用 ssh)

gop*_*410 60 linux terminal debian

当我使用我的帐户(具有 sudo 权限)通过 Debian ssh 进入另一台机器时,我的退格键在按下时会生成一些尴尬的符号。另外Tab&del键也不起作用。

另一方面,我在同一台机器上还有另一个帐户,当我通过这个帐户 ssh 时,它的终端工作得很好。我无法弄清楚为什么会发生这种情况。

小智 61

除了“stty”解决方案,您还可以尝试“TERM”解决方案。

您从某个终端(putty、solaris dterm、debain xterm、you-name-it)通过 ssh 连接到您的 Debian,该终端通过 TERM 环境变量宣布功能(包括退格键和 Tab 键等)。

因此,在 ssh 到 unix 主机(它不依赖于 debian 或其他主机)之后,根据您的终端设置 TERM 变量。考虑你使用 bash 作为 shell 和 vt100 作为终端:

export TERM=vt100
Run Code Online (Sandbox Code Playgroud)

ps: TERM 应该通过 ssh 自动宣布,但在某些情况下,这种魔法会失败。

  • 虽然这对我没有直接帮助,但由于 TERM 设置正确,它确实有助于识别问题。我缺少终端的 terminfo 条目。我正在使用 urxvt 并且在 arch 上你需要安装 rxvt-unicode-terminfo 来解决这个特定问题 (3认同)
  • 仍然不起作用:( (2认同)

小智 52

我以前见过这样的问题。

以退格键为例,远程主机希望将某些字符用作“擦除/退格”,当您在终端中按退格键时,终端程序将向远程主机发送一些字符,如果远程主机期望的内容与此不同终端程序发送的字符,你会遇到这个问题。因此,快速修复如下:

  1. #stty -a在远程主机中运行命令,并在输出中找到预期的擦除代码。说erase=^?
  2. 在终端中,按Ctrl+v并按退格键。您将看到哪些代码作为“擦除”发送。说是^H
  3. 在远程主机中,运行#stty erase ^H.
    (注意:使用Ctrlv+ Backspace,不要手动输入 ^ )

您可以使用与上述相同的方法修复 Tab 问题。

  • 对我来说,退格代码与 `stty -a` 输出相同,但仍然不起作用 (2认同)

ice*_*ame 22

这是因为您的默认 shell 是sh,要使用bash,只需bash从您的 shell运行。

bash
Run Code Online (Sandbox Code Playgroud)

设置bash为默认 shell:

chsh -s /bin/bash 
Run Code Online (Sandbox Code Playgroud)

或者

sudo chsh -s /bin/bash yourusername
Run Code Online (Sandbox Code Playgroud)

  • 这个给我修好了。即使看我的登录外壳也永远不会! (2认同)
  • 我看到了这个问题,但我的 shell 是 bash。 (2认同)

小智 7

您的外壳可能设置为/bin/sh而不是/bin/bash


小智 7

我通常使用它来修复终端中任何时髦的字符输出。它将所有特殊字符重置为其默认值。

stty sane
Run Code Online (Sandbox Code Playgroud)

从 stty 手册页:

与 cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echoonl echoonl 相同-xcase -tostop -echoprt echoctl echoke,所有特殊字符为其默认值


小智 5

除了保罗的回答,如果你想保留彩色输出的能力,你可以使用 xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

  • `toe -a` 显示了支持的终端类型列表...... `xterm-88color` 到目前为止不是唯一的选项,实际上可能在特定系统上不可用。 (3认同)

小智 5

验证远程主机 shell TERM 设置是否与终端的术语设置 (localhost)匹配,并且远程主机支持 TERM 设置

例如:

  1. 从 iTerm(或其他终端应用程序)
$ echo $TERM
xterm-256color
Run Code Online (Sandbox Code Playgroud)

您不需要打开 tmux。我使用 tmux 来强制错误,因为它使用相对不常见的终端配置。

  1. 打开 tmux(基本上是终端应用程序中的另一个终端)
$ echo $TERM
tmux-256color
Run Code Online (Sandbox Code Playgroud)
  1. 从 tmux 运行 ssh 命令并检查 TERM 设置
$ ssh <remote host>
.
.
# Logged into remote host now run...
$ echo $TERM
tmux-256color
Run Code Online (Sandbox Code Playgroud)

因此 tmux 与远程主机正确通信,但我们遇到了退格键或其他一些匹配键问题。让我们检查远程主机支持哪些终端。

  1. 从远程主机
$ toe -a
xterm-256color  xterm with 256 colors
xterm-color     generic "ANSI" color xterm (X Window System)
xterm           X11 terminal emulator
linux           linux console
dumb            80-column dumb tty
ansi            ansi/pc-term compatible with color
Run Code Online (Sandbox Code Playgroud)

看起来远程主机不支持tmux-256colortmux 发送的 TERM 值。它确实支持xterm-256color我们知道我们的终端应用程序支持的功能。

  1. 从远程主机更改 TERM 值
export TERM=xterm-256color
Run Code Online (Sandbox Code Playgroud)