我首先在Windows上用Ansi C编写了一个小程序,现在我在Ubuntu上用内置的GCC编译了它。程序很简单:
scanf()
但奇怪的事情发生了,当我试图移动光标时,它打印出四个字符:
^[[A
^[[B
^[[C
^[[D
llew8vvj1#
因为这是键盘实际发送到PC的信息(更准确地说,终端打印的内容对应于它实际从键盘接收的内容)。例如,bash获得这些值,对它们进行解密,并理解你想四处移动,因此它将移动光标(在左/右的情况下)或者使用它的历史来获取以前的命令(上/下)。所以你不能指望你的程序神奇地支持箭头键。
bash
然而,从终端的标准输入阅读已经支持左/右箭头键(我相信,但我现在不在Linux中测试和确认)。所以我的猜测是有另一个问题干扰。一个可能的原因可能是你的一个修饰键卡住了?可能是ALT,CTRL或SUPER?
qyuhtwio2#
对于那些来自osx(mac)的用户,请尝试将shell更改为bash终端-〉首选项-〉外壳打开-〉[选择]命令(完整路径)则粘贴了/bin/bash个
/bin/bash
but5z9lq3#
这可能是因为用户帐户是在shell中创建的。您可以通过两种方法将其更改为bash。永久解决方案是-
sudo chsh -s /bin/bash ${username}
要使此解决方案正常工作,您必须注销并登录临时解决方案是每次登录ubuntu服务器时键入bash并按回车键。
rekjcdws4#
在MacOS终端对我来说是足够的取消选中“滚动交替屏幕”的问题消失。见下面的首选项截图。
qij5mzcb5#
如果它在一个docker容器下,运行/bin/bash。这帮助我解决了这个问题。
kse8i1jr6#
我认为简单的方法是,我们可以只执行kill %%,因为这有时会由于后台进程而发生。
kill %%
6条答案
按热度按时间llew8vvj1#
因为这是键盘实际发送到PC的信息(更准确地说,终端打印的内容对应于它实际从键盘接收的内容)。例如,
bash
获得这些值,对它们进行解密,并理解你想四处移动,因此它将移动光标(在左/右的情况下)或者使用它的历史来获取以前的命令(上/下)。所以你不能指望你的程序神奇地支持箭头键。然而,从终端的标准输入阅读已经支持左/右箭头键(我相信,但我现在不在Linux中测试和确认)。所以我的猜测是有另一个问题干扰。一个可能的原因可能是你的一个修饰键卡住了?可能是ALT,CTRL或SUPER?
qyuhtwio2#
对于那些来自osx(mac)的用户,请尝试将shell更改为
bash
终端-〉首选项-〉外壳打开-〉[选择]命令(完整路径)
则粘贴了
/bin/bash
个but5z9lq3#
这可能是因为用户帐户是在shell中创建的。您可以通过两种方法将其更改为bash。
永久解决方案是-
要使此解决方案正常工作,您必须注销并登录
临时解决方案是每次登录ubuntu服务器时键入
bash
并按回车键。rekjcdws4#
在MacOS终端对我来说是足够的取消选中“滚动交替屏幕”的问题消失。见下面的首选项截图。
qij5mzcb5#
如果它在一个docker容器下,运行
/bin/bash
。这帮助我解决了这个问题。kse8i1jr6#
我认为简单的方法是,我们可以只执行
kill %%
,因为这有时会由于后台进程而发生。