Prompt

這些序列在 PS1 變數中意味著什麼?

  • January 3, 2019

我很難理解什麼\[\e]0;$PWD\007\]\[\e(0\]b\[\e(B\]意思。

我在 Windows 上的 MobaXterm 上設置提示符,這兩個序列是預設序列。它們分別處於最開始和最結束。

這是結果提示的螢幕截圖: 在此處輸入圖像描述

我認為第二個是用來顯示取代傳統的小箭頭,$但我不知道它是如何達到這個結果的。它幾乎看起來像垃圾。我想這是某種unicode技巧?

關於第一個,我完全不知道它的目的是什麼。我對這個$PWD部分更加困擾。

關於連結的問題:

好吧,正如我提到的,我知道第二個序列顯示箭頭,但為什麼它使用兩個由普通 b 分隔的轉義序列?這很奇怪。

而且,關於第一個,它沒有顯示 PWD。在我的螢幕截圖中,這個序列顯示在最開始,甚至在日期列印之前。紫色路徑使用經典的 \w。我不明白為什麼它在轉義序列中使用 $PWD,這就是我問這個問題的原因。

每個案例都包含“包圍”一些數據的原因是它告訴終端開始做某事,然後發送數據,然後完成某事。

第一個序列是xterm 控制項,bash 可以使用該控制項將 的值放入$PWD視窗標題(和圖示名稱)中。您不會在提示中看到任何內容。shell 值$PWD是數據,左邊開始一個轉義序列,右邊結束這個序列。

另一個切換到 VT100 畫線字元集(請參閱指定 G0 字元集0轉到畫線,B返回到 Latin-1)為b列印(某些東西) 。但是真正的 VT100 並沒有為此顯示箭頭鍵(它會顯示一個*“HT”***,用於水平選項卡):

在此處輸入圖像描述

但是,一些“VT100 仿真器”會做出自己的選擇(儘管通常他們會單獨留下原始的 VT100 選擇)。有趣的是,儘管 MobaXterm 基於 PuTTY,但 PuTTY 在評論中記錄了早期的 VT52 選擇(儘管它沒有實現b的選擇):

       /*
        * 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,而是使用不同的編碼。

引用自:https://unix.stackexchange.com/questions/492117