我正在通过 USB 串行连接登录到在 ARM 开发板上运行的 Arch Linux 安装。安装很顺利,一切看起来都很好。然而,我的控制台表现得很奇怪;它似乎没有清除线路以响应各种命令。例子更容易理解(尽管很难描述):
$ mkdir test
*Press delete*
$ mkdir test*space*
我知道删除是有效的,因为执行上面的命令会创建一个tes
目录。它只是在命令显示上似乎没有正确的行为。我已经检查了“stty -a”并且擦除是正确的(^?)。使用 bash 的历史更明显:
$ mkdir test
$ cd test
*Up Arrow* *Up Arrow*
$ cd testmkdir test
我尝试通过屏幕和单独的 GUI 程序登录到开发板,两者都表现出相同的行为。我确信这是一个简单的配置错误,但我似乎找不到发生这种情况的任何其他问题。有任何想法吗?
答案1
TERM
Bourne Again shell 中的 GNU Readline 库看到的环境变量必须表示正确的在 terminfo 数据库中记录与串行连接末端的实际终端相匹配的信息。
如果串行连接结束时终端仿真器中有可切换的终端类型,则变量TERM
必须切换以匹配当前设置。
传统上,本地真实终端保持物理连接到同一串行线路,系统管理员进行一次性配置更改,以便getty
使用正确的终端类型调用程序。如今,运行模拟器程序的 PC 连接到其串行设备,假装是真正的终端,人们必须保持模拟器配置相同,或者每当模拟器程序发生更改时重新配置主机系统。
当前存在不匹配,并且 GNU Readline 库发出的用于向后移动光标的控制序列(它已从TERM
terminfo 数据库中 - 表示的记录中读取)与您的控制序列不匹配。终端或终端模拟器实际上认识到向后移动光标。
(在输入行末尾时向左删除是由 Readline 制定的向后移动光标,打印一个空格,然后再次向后移动光标。请注意,Readline 始终使用该cub
功能,而不是该cub1
功能。没有终端␈
在其cub
功能中使用该字符。所以你的终端如何响应␈
是一个转移注意力的话题。cub
重要的是它如何响应功能中的实际控制序列。)
列出的线路规则特殊字符stty
是一个转移注意力的因素,有两个原因。他们是输入与处理无关的输出GNU Readline 库使用的控制序列。 GNU Readline 将终端置于非规范输入模式反正当编辑命令行实际发生时。