| |
|
知识库 -> 数码 -> 在Linux中,按上下左右键为什么变成^[[A^[[B^[[C^[[D? -> 正文阅读 |
|
[数码]在Linux中,按上下左右键为什么变成^[[A^[[B^[[C^[[D? |
[收藏本文] 【下载本文】 |
在一些linux终端里,按上下左右键,会回显^[[A^[[B^[[C^[[D。这是什么编码?还有其他那些键位会出现这样的乱码呢? |
你用getchar可以发现上下左右的编码有三位,分别是十进制27,91和65-68,按顺序对应了上下右左,查阅ascii码可知91是[,65-68是ABCD,27为esc键,可能会输出为^[,所以如果你的shell不支持读取这样的3字节编码,就会输出成^[[A,B,C,D这样的乱码了 其他特殊键位一般也都是27 91开头,大部分也是3字节,但有些甚至是四字节,比如pageup/pagedown,但都有固定格式(可能是某个标准规定的吧) |
这还真有个标准,叫做ECMA-48。 其他回答已经提到了,^[表示ASCII的转义字符(ESC),加上[表示控制序列的开始(CSI)。 然后关于方向键的规定是这样的(04/03表示4×16+3,也就是67在ASCII所对应的字符,图上其他数字也以此类推): |
|
|
|
终端其实有很多种模式。在默认模式下,终端会把方向键转换成光标的移动,而不会发给当前正在运行的程序,但程序也可以通过某些设置,使得终端把所有按键都发给程序(比如vim就在一定程度上依赖这样的设置),这时像方向键这样的特殊按键就会以控制序列的形式发送。 而如果程序没能正确处理这些控制序列,而是把它们当作普通字符输出,就会在屏幕上显示乱码 |
题主问为什么会变成^[[A^[[B^[[C^[[D,不是问怎么解决 :) 回答的人都在干嘛 |
最近遇到相同的问题,现在解决了,说一下原因和解决办法 原因:当前使用的shell是/bin/sh 方法:输入bash回车,使用/bin/bash 判断当前使用的shell 后来我发现本问题的这个回答中有更详细的解释 也提及了出现此种问题的另一种可能 |
这个应该是叫 CSI (Control Sequence Introducer) sequences https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_(Control_Sequence_Introducer)_sequences 表格中的CSI就是"ESC [", ESC的ASCII码是\033,终端里写成^[。 类似的,vim里^[ (ctrl + [)也是esc键的映射。 Esc key - Wikipedia |
按住 ctrl 再删除 |
总结一劳永逸的方法: 输入chsh 在Login Shell [*]后输入/bin/bash即可 以后每次连接都ok |
^[[A 是 ASCII编码对于方向键的表述。 这是一种多位编码,不是标准(你开发一个终端,也可以选择用数字或者其他东西来显示),因为单个ASCII里没有方向键,但又不能出错,所以用多个ASCII码来表示你按的键的回显。 |
原因可能是Linux 下的命令环境问题,我尝试用 bash 即可解决; 出现上述问题的时候,命令行只显示一个提示符: $ 1、可以直接输入: bash 使用 bash 模式输入命令; 2、输入: chsh 在Login Shell [*]后输入 /bin/bash 即可,以后每次连接都会使用 bash ; |
这种情况我记得在我自己写的模拟小shell上弄过 |
做个课代表给大家总结下 3 种方案: 方案一 可以在终端中输入如下命令
方案二 使用 bash 模式输入命令;
输入
在Login Shell [*]后输入
方案三
最后福利时间,最近不少小伙伴找我要一些 Linux 学习资料,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理一份「10G Linux 学习资料大全」,免费共享给大家! |
|
据说有小伙伴靠这份攻略顺利进入 BAT 哦,所以一定要好好学习这份资料! 几乎覆盖了 Linux 基础学习的方方面面,非常适合初学者入门! 资料也按目录进行编排,每一章下面都有更具体的内容,具体如下: ? Linux 常用命令汇总 |
|
? Linux 经典入门书籍 |
|
? Linux 网络编程教程 |
|
? Linux 成神学习线图 |
|
? 22 份 BAT 面经 pdf 合集 |
|
另外我还组建了一个「Linux 编程交流群」,群里每天大家都互相交流 Linux 学习心得,也有我们热心肠的小江美女程序媛给大家答疑。 |
|
如果你是 Linux 新手,那我相信你可以迅速融入到这里面来,同时认识更多的编程大佬。 同样你可以靠着「10G Linux 学习资料大全」迅速度过新手阶段,让你上手 Linux 更加轻松。 大家想要上面「10G Linux 学习资料大全 + 进入编程交流群」,可以点击下方??的卡片扫码进群免费领取。 我是沈小南,日常科普 Linux 自学干货,如果问答对你有用,欢迎双击收藏支持! 下面是往期的干货合集: 2022 年 Linux 自学攻略: 干货|零基础自学 Linux 有哪些免费资料? 干货|有哪些值得推荐的 Linux 学习视频教程? 干货|学习linux命令的书籍有哪些推荐? 干货|2022 年零基础如何学好 Linux? 2022 年 Linux 使用指南 干货|5大 Linux 版本推荐 干货|Linux 系统运维教程 干货|Linux 编程书籍推荐 干货|2022 年 Linux 下最好用的代码编辑器是什么? 2021 年最好的 Linux 服务器发行版 |
不懂 |
为了让你看到控制字符 |
原因:当前用户的shell类型(命令解释器)为 “非bash” 解决办法之一:把 /etc/passwd 里当前用户的shell类型(命令解释器)更改为 “/bin/bash” |
输入bash回车 |
在Linux终端中,当你按下上下左右键时,终端不会直接显示这些键的字符,而是发送一系列的特殊序列给终端。这些序列通常以ESC字符(即ASCII码的27,也可以表示为\033或^[)开始,后面跟随一些特定的字符来表示不同的按键。这种序列被称为ANSI转义序列。 对于上下左右键,终端发送的ANSI转义序列分别是: 上键:^[[A 或 \033[A下键:^[[B 或 \033[B左键:^[[D 或 \033[D右键:^[[C 或 \033[C 这里的^[代表ESC键,[是固定的,而A、B、C、D分别代表上、下、右、左。 这些序列允许终端和运行在终端上的程序区分普通字符输入和特殊按键事件。例如,在文本编辑器或命令行界面中,这些序列可以用来控制光标移动而不是输入字符。当你在一个不处理这些序列的上下文中按这些键时(比如在一个简单的文本显示中),这些序列就会直接显示出来,因为它们没有被特殊处理或解释为控制代码。 |
如果切换到bash不能解决问题的话建议可能是由于ubuntu预安装的是tiny版本造成的,卸载精简版后安装完全版可解决。 sudo apt-get remove vim-common sudo apt-get install vim 参考https://www.ctolib.com/topics-93459.html |
这可能是因为你的终端设置不正确或者你正在使用的是非交互式shell。当你按下上下左右箭头键时,实际上它们在终端中被表示为特殊的ASCII控制序列。这些序列通常看起来像`^[[A`、`^[[B`、`^[[C`和`^[[D`,分别代表上、下、右、左箭头键。 这种现象通常是由于以下原因造成的: 1. 你可能是在一个不支持这些控制序列的简单文本编辑器(如vim)或没有正确配置的shell会话中输入的。 2. 你的终端仿真器(如xterm, Gnome Terminal, Terminator等)的设置可能有问题。 3. 环境变量`TERM`可能没有正确设置。这个变量告诉shell你的终端类型,对于大多数现代终端应该是`xterm-256color`或`xterm-color`。 要解决这个问题,你可以尝试以下方法: 1. 如果你在使用vim,确保你是在插入模式(Insert mode)而不是命令模式(Command mode)。在命令模式下,箭头键可能会显示为控制序列。 2. 检查并确保你的终端仿真器设置正常。例如,在Gnome Terminal中,可以在“首选项”>“profiles”>“键盘输入模式”中选择“Emulate ANSI X3.64 (xterm)”。 3. 确保环境变量`TERM`已经正确设置。你可以在终端中运行`echo $TERM`来查看当前设置。如果它没有设置或设置不正确,可以尝试将其设置为`xterm-256color`: ``` export TERM=xterm-256color ``` 如果你仍然遇到问题,可能需要查阅你的终端模拟器或Shell的相关文档以获取更多帮助。 |
这是因为终端正在将这些键盘输入解释为 ANSI 转义序列。这些转义序列用于在终端中控制光标的移动以及其他屏幕操作。 这里的每个转义序列都有其特定的含义: ^[[A 表示“向上箭头” ^[[B 表示“向下箭头” ^[[C 表示“向右箭头” ^[[D 表示“向左箭头” 这些序列的组成如下: ^[ 是控制字符 ESC (Escape) 的表示方式,ESC 的 ASCII 码是 27。 [ 是一个固定的字符,标志着转义序列的开始。 最后的 A、B、C 和 D 分别代表不同的方向。 通常情况下,不会在终端看到这些字符。但如果你在一个不支持或未正确配置来解释这些 ANSI 转义序列的文本环境中(例如某些基本文本编辑器或配置不当的终端模拟器),就会看到这些转义序列。在正常配置的终端中,如 xterm 或 GNOME Terminal,这些序列会被正确解释为光标移动,而不会显示为字符。 最后,如果你在使用的程序或脚本中看到这些字符,可能需要检查你的终端设置或程序是否正确处理这些 ANSI 转义序列。 |
今天刚遇到这种情况,找了半天终于解决。 可以在终端中输入如下命令: export TERM=linux 这样可以解决上下左右键变成ABCD这些,ubuntu11.04默认的是TERM=xterm,你可以使用echo $term来查看一下。如果不是最新的11.4,上述操作不能成功的话,尝试使用export TERM=vt100试试 |
我新创建的用户遇到了相同的问题,凭感觉搞成功了,sudo修改 /etc/passwd 我看root那一行末尾是有/bin/bash的,我创建的user1 后面没有(查了一下,默认登陆的shelll是sh),加上/bin/bash就好了。换句话说就是默认的shell->sh就是这个亚子,主动启用bash或其它shell就可以解决问题。 |
如果是Ubuntu普通用户,这篇文章可以解决: Ubuntu非root权限非chsh更改默认shell_silent56_th的博客-CSDN博客_you may not change the shell for?blog.csdn.net/silent56_th/article/details/81367774 |
|
|
还是这个帖子的博客的方案有效,连接 |
|
[收藏本文] 【下载本文】 |
上一篇文章 下一篇文章 查看所有文章 |
|
|
娱乐生活:
电影票房
娱乐圈
娱乐
弱智
火研
中华城市
印度
仙家
六爻
佛门
风水
古钱币交流专用
钓鱼
双色球
航空母舰
网球
乒乓球
中国女排
足球
nba
中超
跑步
象棋
体操
戒色
上海男科
80后
足球: 曼城 利物浦队 托特纳姆热刺 皇家马德里 尤文图斯 罗马 拉齐奥 米兰 里昂 巴黎圣日尔曼 曼联 |
网站联系: qq:121756557 email:121756557@qq.com 知识库 |