当前位置: 首页>>技术教程>>正文


为什么在Ubuntu中按箭头键时终端会显示“^[[A” “^[[B” “^[[C” “^[[D”?

,

问题描述

我首先在Windows的Ansi C中编写了一个小程序,现在我在Ubuntu上使用内置 GCC对其进行了编译。

该程序很简单:

  • 使用scanf()从控制台读取该行。

  • 分析字符串并计算。

但是有些奇怪的事情发生了。当我尝试移动光标时,它会打印四个字符:

  • 按下Up将打印“ ^[[A

  • 按下Dn将打印“ ^[[B

  • 按下Rt将打印“ ^[[C

  • 按下Lt将打印“ ^[[D

  • 如何避免这种情况?

  • 为什么它打印这四个字符而不是移动光标?

最佳办法

因为这就是键盘实际发送到PC的内容(更确切地说,是终端为从键盘实际收到的内容打印的内容)。例如,bash获取这些值,对其进行解密并了解您要四处移动,因此它将移动光标(在向左/向右的情况下)或使用其历史记录来获取先前的命令(向上/向下)。因此,您不能指望程序神奇地支持箭头键。

但是,从终端的标准输入中读取内容已经支持向左/向右箭头键(我相信,但是我现在不在Linux中进行测试和确定)。所以我的猜测是还有另一个问题在干扰。一个可能的原因可能是您的一个修改键卡住了吗?也许是ALT,CTRL还是SUPER?

次佳办法

对于那些来自osx(mac)的用户,请尝试将shell更改为bash

Terminal -> Preferences -> Shells open with -> [select] Command (complete path)

然后贴上

/bin/bash

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8277.html,未经允许,请勿转载。