bash序列“ \ 033 [999D””是什么意思,它在哪里解释?


19

我遇到过bash序列,例如\033[999D\033[2K\r,它们用于在终端上的打印输出上进行一些操作。但是这些顺序是什么意思?在网上哪里可以找到列表/摘要,以帮助我了解这些序列的含义?


3
这些是终端序列,不是bash序列。您需要查看终端文档以确定其功能。
克里斯·唐


1
@adizere并非所有转义序列都执行颜色更改。此Q中的序列用于行操纵和光标移动,而不是颜色。
casey 2014年

Answers:


32

请参阅此链接http://www.termsys.demon.co.uk/vtansi.htm。正如Anthon所说,\033 是转义字符的C样式八进制代码。将[999D光标移动回999列,想必让该行的开始的强制方法。[2K擦除当前行。\r是回车符,它将光标移回当前行的开头,并且是C样式的转义序列而不是终端控制序列。

更新资料

正如其他人指出的那样,这些控制序列bash本身无关紧要,而是文本出现在其上的终端设备/仿真器。曾几何时,通常由完全不同的硬件来解释这些序列。最初,每个人将响应完全不同的代码集。为了解决这个问题,termcapterminfo库用于编写与多个终端兼容的代码。该tput命令是terminfo库的接口(termcap也可以在其中编译支持),并且是创建兼容序列的更可靠的方法。

也就是说,还有ANSI X3.64或ECMA-48标准。任何现代的终端实现都将使用此方法。terminfo并且termcap由于实现可能不完整或包含非标准扩展而仍然很重要,但是对于大多数目的,可以安全地假定通用ANSI序列将起作用。

xterm FAQ提供的终端仿真器之间的差异了一些有趣的信息(许多只是试图模仿xterm本身),以及如何xterm序列涉及到上面的链接中提到的VT100终端。它还提供了控制序列确定列表xterm

当然,Linux控制台也是最常用的工具,可以在中找到其明确的控制顺序列表man console_codes,以及与的比较xterm


您包含的链接只是我要找的页面。
Alex

@Alex Glad我自己找到了它,我看过的大多数页面都只有封面颜色,而且阅读起来真的很复杂。这样布置起来既好又简单。
Graeme

请注意,转义码的作用取决于终端的类型(您可以在现代屏幕/ OS上模拟几种类型的终端)。您可以改用tput命令,以提高iirc的可移植性(但要以减少对终端详细信息的覆盖为代价)。许多人都支持VT100(该页面所讨论的内容)(但我认为并非所有内容都受支持)。但是您的TERM变量可能设置为其他终端,这可能会影响某些命令的效果
Olivier Dulac 2014年

@Olivier,正确tput是一种更可靠的方法。但这是ANSI兼容性,而不是现在相当普遍的特定VT100终端,尽管我想可以将其设置xterm为不接受它们的模式。我会在此提供一些更多信息。
Graeme 2014年

@Olivier许多终端模拟器也设置TERM=xterm为,但并未实现所有xterm功能。
Graeme 2014年

5

\033是转义字符,而那些序列不bash的具体解释,但由终端(软件或硬件(通过网络或串行线)),其中(bash)的程序运行。这样的序列有很多。

它们各自做什么,取决于它所依赖的终端,还可能取决于任何改变终端状态的先前序列。

这些通常用于在bash提示中设置颜色,但是我没有在该页面上找到您的特定示例。


3

'\ 033 [999D'很有趣。某些终端执行的转义序列较少,因此,如果'\ 033 [1G','\ 033 [1; 1H”,'\ 033 [1; 1f”或'\ r'均不起作用,则可能需要执行此操作应该,但是谁使用千列文字显示?这些序列在Linux中有一个手册页:console_codes(4)。bjh21提供了所有代码的详细列表。根据哪个程序解析“ \ 033”,更清晰的替换项“ \ e”可能可用。

确实不打算直接使用它们- 发出终端控制命令的正确方法是使用ncurses之类的抽象层-但它们在字符串文字方面的功能也一样好。


好一点,我只是假设这\033[999D会备份到前几行。虽然可能只是狡猾的编码的结果;)您也可以bash直接解释转义码,例如$'\033[999D'
Graeme 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.