0%

日常解惑-为什么我的xshell会输出xshell

问题产生

在使用Xshell连接远端服务器的时候,在进行一些操作的时候,Xshell会在命令行中疯狂输出自己,就像这样:

image-20200107102634302

这个时候八成你的屏幕上面是有一堆乱码的。之前也没一直去理解为什么会这样,现在有空来分析一下这个问题出现的原因和解决办法。

分析过程

首先需要复现一下这个问题。复现的命令很简单cat /dev/urandom | head,这个命令会让Xshell在命令行内输出Xshell。多次运行发现输出的Xshell次数还不一样。

然后我又在windows subsystem for linux里面试了同样的命令好几次,都没有出现异常;在Mac中也一样试了好几次,也没有出现异常。而且结合它的输出来看,这肯定是Xshell自身的设计或者是缺陷了。

而dev下面的urandom是随机生成的,所以从我个人的知识来猜测,应该是某个特殊的控制字符触发了这个“机制”。

验证

既然猜测是特殊控制字符,那干脆把所有的ASCII字符表对应的字符(不管是不是控制字符)全部打印一遍,看看结果就知道了:

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>

int main()
{
int i = 0;
for (int i = 0; i < 128; i++)
{
printf("%d : ", i + 1);
printf("%c \n", i);
}
return 0;
}

编译并且执行之后,还真的会在xshell里出现一次xshell。也就是猜测不错。最后通过不断缩小范围,可以发现这个控制字符是5号字符:

image-20200107103805400

最后我在Xshell的官方用户手册里面找到了答案:

image-20200107104556399

对于ENQ,Xshell的做法是回复它自己的名字。当然你也可以通过配置来进行修改:

image-20200107105446111