有彩色外壳输出手册吗?


23

您知道,特殊字符序列产生的彩色输出,例如:

echo -e "\e[34m Hello\n \e[0m"

这将产生蓝色的单词“ Hello”。为此,我不得不在网上搜索,这很困难,因为不同的消息来源可能会说不同的话。我以为必须要有一些手册,但找不到。即使有apropos color或类似的东西。因此,问题是-在哪里可以找到可靠的手册?


2
您正在寻找有关ANSI转义代码的文档。(当我需要查找时,我倾向于使用Wikipedia页面。)
chepner 2015年

请注意,您不一定需要知道这些转义序列。几个外壳程序(至少tcsh,zsh,fish)具有内置支持,可以以彩色输出,而不必显式地编写这些序列。
斯特凡Chazelas

Answers:


27

此页面中列出的信息来源太多:

  • 该命令echo -e使用扩展名将其呈现\e为ASCII 27(八进制33或“ \ 033”)。打印这些用途的便携式方法printf(POSIX)。与标准echo(POSIX)比较。
  • 您的示例可以重写为

    printf "\033[34m Hello\n \033[0m"

  • 彩色转义的标准是ECMA-48(编码字符集的控制功能)。
  • 在ECMA-48中,8.3.117 SGR-SELECT GRAPHIC RENDITION列出了用于设置8种前景色和8种背景色的控制序列。
  • 它还列出了代码39/49“默认显示颜色(实现定义)”和代码38/48“保留以供将来标准化;用于设置字符前景色,如ISO 8613-6 [CCITT T.416建议书]中所指定。” 也就是说,另一个组织提出了一项建议,但该建议(到目前为止(24年后)尚未成为标准的一部分)。
  • 仔细阅读它,您可能会注意到该标准在许多地方含糊不清,允许有不同的解释。它描述了这些控制序列的语法,但没有描述它们的行为。为此,您必须转到相应端子的文档。
  • Xterm控制序列中提供了xterm的文档,该文档假定您熟悉http://vt100.net上的DEC文档。
  • 对于其他终端,其手册页可能会枚举控件(就像在console_codes中对Linux控制台所做的那样)。
  • 其他终端将自己记录为“ xterm”;有关讨论,请参阅xterm FAQ 比较版本(通过计数控件)。幸运的是,颜色控件几乎兼容的(但请参阅ncurses常见问题解答,我的终端显示了一些未着色的空格)。
  • 您还可以阅读的手册页tput,该手册页允许您使用terminfoShell脚本中的功能。您的示例可以重写为

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • Bash Prompt HOWTOAdvanced Bash-Scripting Guide等一些来源提到了颜色,但是(即使是这些)通常也有差距和遗漏,对于ECMA-48毫无帮助。

  • 您可以从其他来源(例如引用的来源)等网络搜索副本中找到大多数其他来源,并且通常很少关注实际标准。

ECMA-48中的相关部分似乎是8.3.117-“ SGR-SELECT GRAPHIC RENDITION”。它仅提及“ blue”一词,并且在那里找到的代码至少在我的XTerm中有效。
2015年

是的-我会澄清一下。
托马斯·迪基

2
答案非常好-希望所有答案都像您一样
-Sergius

1
xterm还支持256色模式,大概在上面的手册之一中对此进行了介绍。
sendmoreinfo

请参阅wynnnetherland.com/journal/…,以获得一堆有用的信息,包括grc软件包,该软件包可以使用命令输出进行各种着色。
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.