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

时间:2014-01-27 14:58:11

标签: c ubuntu

我首先在Windows上用Ansi C编写了一个小程序,然后我在Ubuntu上用内置的GCC编译它。

程序很简单:

  • 使用scanf()从控制台读取该行。
  • 分析字符串并计算。

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

  • 向上打印“^[[A
  • Dn 打印“^[[B
  • Rt 打印“^[[C
  • Lt 打印“^[[D

  • 如何避免这种情况?

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

6 个答案:

答案 0 :(得分:21)

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

然而,从终端的标准输入读取已经支持左/右箭头键(我相信,但我现在不在Linux中测试并确保)。所以我猜测还有另一个问题在干扰。一个可能的原因可能是你的一个修饰键被卡住了?也许ALT,CTRL或SUPER?

答案 1 :(得分:12)

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

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

然后粘贴

/bin/bash

答案 2 :(得分:10)

这可能是因为用户帐户是在Shell中创建的。您可以通过两种方式将其更改为bash。

永久性解决方案是-

sudo chsh -s /bin/bash ${username}

要使该解决方案正常工作,您必须注销并登录

临时解决方案是每次登录ubuntu服务器类型bash并按回车键时都会出现的问题。

答案 3 :(得分:0)

在 MacOS 终端上对我来说足以取消选中“滚动备用屏幕”以使问题消失。请参阅下面的首选项屏幕截图。enter image description here

答案 4 :(得分:-3)

我认为简单的方法就是我们可以做到 kill %% 因为这有时是由于后台进程而发生的。

答案 5 :(得分:-8)

只需在终端中输入$ bash即可。 这样可以解决问题。