退格键,Tab在终端中不起作用(使用ssh)


37

当我使用自己的帐户(具有sudo权限)与Debian一起进入另一台计算机时,按Backspace键会生成一些笨拙的符号。而且Tabdel键也无法正常工作。

另一方面,我在同一台计算机上还有另一个帐户,当我通过该帐户使用ssh时,其终端可以正常运行。我不知道为什么会这样。

Answers:


37

我以前见过这样的问题。

以退格为例,远程主机希望将某些字符用作“擦除/退格”,而在终端中按Backspace时,如果远程主机希望与diff进行比较,则终端程序将向远程主机发送一些字符。终端程序发送的字符,您将遇到此问题。因此,快速修复方法如下:

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

您可以使用与上述相同的方法来解决“制表符”问题。


我的退格字符是一些特殊的符号,例如倒三角形。所以它不起作用
gopi1410 2012年

1
这个简单的评论无疑是我所见过的最好的解决方案。感觉就像是在跳动,但确实有效。
Paulo Matos

这对我有用!我不明白的是为什么我的shell会按预期处理退格键,但是从我的应用程序中的stdin读取却不能。进行建议的更改会导致退格键对两者都起作用。我的理解是,外壳程序处理标准输入缓冲,因此外壳程序和应用程序的退格处理不应该相同吗?
塞缪尔

1
如果根本没有发送代码怎么办?Ctrlv +退格键不会产生任何结果……
Manfredo

对我来说,退格键的代码是一样的stty -a输出,但仍然无法正常工作
马捷Ĵ

36

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

您可以通过TERM环境变量从某个终端(putty,solaris dterm,debain xterm,you-name-it)SSH到Debian,此终端通知功能(包括Backspace和Tab这样的键)。

因此,在将ssh转换为unix主机(不依赖于debian或其他主机)之后,请根据您的终端设置TERM变量。考虑您使用bash作为外壳,使用vt100作为终端:

export TERM=vt100

ps:TERM应该通过ssh自动声明,但是在某些情况下,这种魔术失败了。


仍然不起作用:(
gopi1410 2012年

您正在使用哪个终端?您尝试过的TERM的价值是什么?
paul,2012年

我试过vt100。我如何了解TERM的价值?我尝试了从cygwin(在Windows中)到Debian的ssh。如果cygwin有问题,我什至从ubuntu终端尝试了一下,但是同样的问题。
gopi1410 2012年

不确定cygwin是否具有良好的终端仿真,据我所知,cygwin仅使用缺少终端仿真的常规Windows控制台(可能是错误的)。从ubuntu,一切都应该正常工作。debian上的shell或termcap库出了点问题。从Ubuntu登录并给我输出命令:1. echo $ TERM 2. stty -a
paul 2012年

2
尽管这并没有直接帮助我,但是由于正确设置了TERM,它确实有助于发现问题。我缺少终端的terminfo条目。我正在使用urxvt,在拱门上,您需要安装rxvt-unicode-terminfo才能解决此特定问题
Xandaros

15

这是因为您sh要使用的默认外壳程序是bash,只需bash从您的外壳程序运行即可。

bash

设置bash为默认外壳:

chsh -s /bin/bash 

要么

sudo chsh -s /bin/bash yourusername

2
这个为我解决了。绝对不要看我的登录外壳!
James Pack

2
我看到了这个问题,但是我的外壳是bash。
fraxture

6

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


1
与此答案相关的信息:unix.stackexchange.com/questions/50542/…–
塞缪尔


如果它能说明更多信息以及如何进行更改,则将更加有用,但这是我遇到的问题。感谢@Tom提供的链接为我解决了此问题。
杰克

这就是我的情况..对于该特定用户。/etc/passwd当我添加:/bin/bash到他的行中时,没有外壳定义。您可以了解正在使用什么外壳echo $0
MSpreij

6

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

stty sane

从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 echo echoe echol -xcase -tostop -echoprt echoctl echoke,所有特殊字符为其默认值


2

在保罗的回答之上,如果您想保留彩色输出的功能,可以使用xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc

1
toe -a显示了受支持的终端类型列表... xterm-88color到目前为止不是唯一的选择,并且实际上可能在特定系统上不可用。
0xC0000022L
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.