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

qybjjes1  于 2022-11-02  发布在  其他
关注(0)|答案(6)|浏览(588)

我首先在Windows上用Ansi C编写了一个小程序,现在我在Ubuntu上用内置的GCC编译了它。
程序很简单:

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

但奇怪的事情发生了,当我试图移动光标时,它打印出四个字符:

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

  • 如何避免这种情况?
  • 为什么它打印这4个字符而不是移动光标?
llew8vvj

llew8vvj1#

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

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

qyuhtwio

qyuhtwio2#

对于那些来自osx(mac)的用户,请尝试将shell更改为bash
终端-〉首选项-〉外壳打开-〉[选择]命令(完整路径)
则粘贴了
/bin/bash

but5z9lq

but5z9lq3#

这可能是因为用户帐户是在shell中创建的。您可以通过两种方法将其更改为bash。
永久解决方案是-

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

要使此解决方案正常工作,您必须注销并登录
临时解决方案是每次登录ubuntu服务器时键入bash并按回车键。

rekjcdws

rekjcdws4#

在MacOS终端对我来说是足够的取消选中“滚动交替屏幕”的问题消失。见下面的首选项截图。

qij5mzcb

qij5mzcb5#

如果它在一个docker容器下,运行/bin/bash。这帮助我解决了这个问题。

kse8i1jr

kse8i1jr6#

我认为简单的方法是,我们可以只执行kill %%,因为这有时会由于后台进程而发生。

相关问题