这些序列在 PS1 变量中意味着什么?

这些序列在 PS1 变量中意味着什么?

我很难理解\[\e]0;$PWD\007\]和的\[\e(0\]b\[\e(B\]含义。
我正在 Windows 上的 MobaXterm 上设置提示符,这两个序列是默认序列。他们分别处于最开始和最结束。

这是生成的提示的屏幕截图: 在此输入图像描述

我认为第二个是用来显示小箭头取代传统的$,但我不知道它是如何实现这个结果的。它几乎看起来像垃圾。我想这是某种 unicode 技巧?

对于第一个,我完全不知道它的目的是什么。我对这部分更感到困扰$PWD

关于链接的问题:

好吧,正如我提到的,我知道第二个序列显示箭头,但为什么它使用两个由普通 b 分隔的转义序列?这很奇怪。
而且,关于第一个,它没有显示 PWD。在我的屏幕截图中,该序列显示在最开始的地方,甚至在打印日期之前。紫色路径使用经典的 \w。我不明白为什么它在转义序列中使用 $PWD,这就是我问这个问题的原因。

答案1

每个案例都包含一些“括号”某些数据的原因是它告诉终端开始做某事,然后发送数据,然后结束做某事。

第一个序列是xterm控制bash 可以使用它来将 的值$PWD放入窗口标题(和图标名称)中。您不会在提示中看到任何内容。 shell 值$PWD是数据,左侧开始转义序列,右侧完成该序列。

另一种切换到 VT100 画线字符集(请参见指定G0字符集:0进入画线阶段,B返回 Latin-1) 打印(某物)。但真正的 VT100 不会显示箭头键(它会显示“H T”,对于水平制表符):

在此输入图像描述

然而,一些“VT100 仿真器”做出了自己的选择(尽管通常他们不理会原始的 VT100 选择)。有趣的是,虽然 MobaXterm 基于 PuTTY,但 PuTTY 在评论中记录了早期的 VT52 选择(尽管它没有实现):

        /*
         * From the VT100 Manual
         * NOTE: The special graphics characters in the VT100
         *       are different from those in the VT52
         *
         * From VT102 manual:
         *       137 _  Blank             - Same
         *       140 `  Reserved          - Humm.
         *       141 a  Solid rectangle   - Similar
         *       142 b  1/                - Top half of fraction for the
         *       143 c  3/                - subscript numbers below.
         *       144 d  5/
         *       145 e  7/
         *       146 f  Degrees           - Same
         *       147 g  Plus or minus     - Same
         *       150 h  Right arrow
         *       151 i  Ellipsis (dots)
         *       152 j  Divide by
         *       153 k  Down arrow
         *       154 l  Bar at scan 0

真正的 VT100 也会模拟 VT52,因此 PuTTY 有一些与 VT52 相关的代码。但显示的转义序列不会那么远——它只是 VT100。至于为什么 VT52 提供了向右箭头和向下箭头,但没有向上箭头或向左箭头,这一点尚不清楚,大约 40 年后。但 MobaXterm 的开发人员可能决定使用看起来不太有用的代码来改进东西。

MobaXterm 终端仿真器的源代码在其网站上为“MoTTY”。用于画线字符的表如下所示:

/* Character conversion arrays; they are usually taken from windows,
 * the xterm one has the four scanlines that have no unicode 2.0
 * equivalents mapped to their unicode 3.0 locations.
 */
static const WCHAR unitab_xterm_std[32] = {
//MOBAMODIF
//    0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1,
    0x2022, 0x2592, 0x27a4, 0x240c, 0x2714, 0x2718, 0x00b0, 0x00b1,
//END_MOBAMODIF
    0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba,
    0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
    0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020
};

第一行是他们更改的内容(注释来自 PuTTY,又改编自 xterm)。在 xterm 上将第一行渲染为 UTF-8 显示字符是什么(提示:第一个条目是八进制140,或`):

8226 ->0x2022 ->{•} (4 bytes, punct)
9618 ->0x2592 ->{▒} (4 bytes, printing)
10148 ->0x27a4 ->{➤} (5 bytes, printing)
9228 ->0x240c ->{␌} (4 bytes, printing)
10004 ->0x2714 ->{✔} (5 bytes, printing)
10008 ->0x2718 ->{✘} (5 bytes, printing)
176 ->0xb0 ->{°} (3 bytes, printing)
177 ->0xb1 ->{±} (3 bytes, printing)

建议的重复项与问题的任何部分都无关,特别是第二部分,因为提示字符串不使用 UTF-8,而是使用不同的编码。

相关内容