【问题标题】:Parsing the text that sets colors in a bash shell解析在 bash shell 中设置颜色的文本
【发布时间】:2015-09-06 15:17:56
【问题描述】:

有人可以向我指出网络上的一些文档,这些文档将解释 bash shell 如何解析设置颜色的以下行,或者从解析器视图解释如何读取以下行?

  • 我知道 32 会导致显示深绿色
  • 34 导致显示深蓝色

但是第一个 \033 是做什么用的?在 32 和 33 之后的 'm' 是做什么用的?

green ="\[\033[0;32m\]"
blue="\[\033[0;34m\]" 

并最终将这些和其他项目导出到 PS1

【问题讨论】:

    标签: linux git-bash


    【解决方案1】:

    bash 的最佳起点是Bash Prompt HOWTO,特别是Bash Prompt Escape Sequences部分。

    字符\033(称为escescape)后跟左方括号[是7位字符的形成方式ECMA-48 控制序列启动器 (CSI)。 开始一个控制序列,一直持续到 final 字符(必须在 64-126 范围内),在这种情况下是 m .最后一个字符是决定它是什么类型的控制序列的因素之一——这个是 SGR(设置图形再现)。

    虽然大多数结尾字符是字母(A-Z 或 a-z),但也有少数不是。 XTerm Control Sequences 列举了一些例子:

    CSI Pm `  Character Position Absolute  [column] (default = [row,1])
              (HPA).
    CSI Pt; Pl; Pb; Pr $ {
              Selective Erase Rectangular Area (DECSERA), VT400 and up.
                Pt; Pl; Pb; Pr denotes the rectangle.
    CSI Ps ' |
              Request Locator Position (DECRQLP).
    CSI Pm ' }
              Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.
    CSI Pm ' ~
              Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.
    

    你的例子

    green ="\[\033[0;32m\]"
    

    拆开:

    • \[\] 告诉 bash 忽略包含的字符(不要将它们视为具有宽度的可打印字符)。这是特定于 bash 的。如果您使用 zsh,则有一个 different way 可以做同样的事情。大多数 shell(例如 ksh)不提供此功能。
    • SGR 序列中的 0 重置 SGR 序列可能已设置的任何属性(例如颜色)。
    • ; 分号将其与下一个参数(即特定颜色)隔开。
    • ECMA-48 定义了 8 种前景色和 8 种背景色(通常称为“ANSI 颜色”,尽管很久没有相应的 ANSI 标准了)。

    【讨论】:

    • 值得补充的是,除了外部 \[\] 包装它之外,该序列不是特定于 bash 的 - 它是一个终端序列。所以它告诉 xterm、konsole 或任何您的终端仿真程序要更改当前颜色。这就是 SGR 的意思——它是一个对终端的“设置图形再现”命令,终端命令通常以 \033 开头并以某个字母结尾。
    猜你喜欢
    • 2014-04-28
    • 2016-09-30
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2011-09-27
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多