我遇到过bash序列,例如\033[999D
和\033[2K\r
,它们用于在终端上的打印输出上进行一些操作。但是这些顺序是什么意思?在网上哪里可以找到列表/摘要,以帮助我了解这些序列的含义?
我遇到过bash序列,例如\033[999D
和\033[2K\r
,它们用于在终端上的打印输出上进行一些操作。但是这些顺序是什么意思?在网上哪里可以找到列表/摘要,以帮助我了解这些序列的含义?
Answers:
请参阅此链接http://www.termsys.demon.co.uk/vtansi.htm。正如Anthon所说,\033
是转义字符的C样式八进制代码。将[999D
光标移动回999列,想必让该行的开始的强制方法。[2K
擦除当前行。\r
是回车符,它将光标移回当前行的开头,并且是C样式的转义序列而不是终端控制序列。
正如其他人指出的那样,这些控制序列bash
本身无关紧要,而是文本出现在其上的终端设备/仿真器。曾几何时,通常由完全不同的硬件来解释这些序列。最初,每个人将响应完全不同的代码集。为了解决这个问题,termcap
和terminfo
库用于编写与多个终端兼容的代码。该tput
命令是terminfo
库的接口(termcap
也可以在其中编译支持),并且是创建兼容序列的更可靠的方法。
也就是说,还有ANSI X3.64或ECMA-48标准。任何现代的终端实现都将使用此方法。terminfo
并且termcap
由于实现可能不完整或包含非标准扩展而仍然很重要,但是对于大多数目的,可以安全地假定通用ANSI序列将起作用。
本xterm
FAQ提供的终端仿真器之间的差异了一些有趣的信息(许多只是试图模仿xterm
本身),以及如何xterm
序列涉及到上面的链接中提到的VT100终端。它还提供了控制序列的确定列表xterm
。
当然,Linux控制台也是最常用的工具,可以在中找到其明确的控制顺序列表man console_codes
,以及与的比较xterm
。
tput
命令,以提高iirc的可移植性(但要以减少对终端详细信息的覆盖为代价)。许多人都支持VT100(该页面所讨论的内容)(但我认为并非所有内容都受支持)。但是您的TERM变量可能设置为其他终端,这可能会影响某些命令的效果
tput
是一种更可靠的方法。但这是ANSI兼容性,而不是现在相当普遍的特定VT100终端,尽管我想可以将其设置xterm
为不接受它们的模式。我会在此提供一些更多信息。
TERM=xterm
为,但并未实现所有xterm
功能。
'\ 033 [999D'很有趣。某些终端执行的转义序列较少,因此,如果'\ 033 [1G','\ 033 [1; 1H”,'\ 033 [1; 1f”或'\ r'均不起作用,则可能需要执行此操作应该,但是谁使用千列文字显示?这些序列在Linux中有一个手册页:console_codes(4)。bjh21提供了所有代码的详细列表。根据哪个程序解析“ \ 033”,更清晰的替换项“ \ e”可能可用。
确实不打算直接使用它们- 发出终端控制命令的正确方法是使用ncurses之类的抽象层-但它们在字符串文字方面的功能也一样好。
\033[999D
会备份到前几行。虽然可能只是狡猾的编码的结果;)您也可以bash
直接解释转义码,例如$'\033[999D'
您可以搜索“ 033术语转义列表”或“ 033 tput ”,然后在有人回答之前查看http://wiki.bash-hackers.org/scripting/terminalcodes了解更多信息;]