PS1 변수에서 이러한 시퀀스는 무엇을 의미합니까? [복사]

PS1 변수에서 이러한 시퀀스는 무엇을 의미합니까? [복사]

\[\e]0;$PWD\007\]및 의 의미를 이해하는 데 어려움을 겪고 있습니다 \[\e(0\]b\[\e(B\].
저는 Windows에서 MobaXterm에 대한 프롬프트를 설정하고 있는데 이 두 시퀀스가 ​​기본 시퀀스입니다. 그들은 각각 시작과 끝에 있습니다.

다음은 생성된 프롬프트의 스크린샷입니다. 여기에 이미지 설명을 입력하세요.

두 번째 것은 전통적인 화살표 대신 작은 화살표를 표시하는 데 사용된 것 같지만 $어떻게 이 결과를 얻을 수 있는지 모르겠습니다. 거의 쓰레기처럼 보입니다. 이건 일종의 유니코드 트릭인 것 같은데요?

처음에는 그 목적이 무엇인지 전혀 몰랐습니다. 저는 이 부분이 더 마음에 걸립니다 $PWD.

링크에 관한 질문:

글쎄요, 앞서 언급했듯이 두 번째 시퀀스에 화살표가 표시된다는 것은 알지만 왜 일반 b로 구분된 두 개의 이스케이프 시퀀스를 사용합니까? 이것은 매우 이상합니다.
그리고 첫 번째 항목에는 PWD가 표시되지 않습니다. 내 스크린샷에서는 날짜가 인쇄되기 전이라도 맨 처음에 시퀀스가 ​​표시됩니다. 보라색 경로는 클래식 \w를 사용합니다. 이스케이프 시퀀스에 $PWD를 사용하는 이유를 이해할 수 없어서 이 질문을 하게 되었습니다.

답변1

각 케이스에 특정 데이터에 대한 "괄호"가 포함되어 있는 이유는 터미널에 이를 알리기 때문입니다.시작뭔가를 한 다음 데이터를 보내고마치다뭔가를 해보세요.

첫 번째 순서는xterm 제어$PWDbash를 사용하여 창 제목(및 아이콘 이름)에 값을 넣을 수 있습니다 . 프롬프트에는 아무것도 표시되지 않습니다. 쉘 값 $PWD은 데이터이며, 왼쪽에서 이스케이프 시퀀스를 시작하고 오른쪽에서 완료합니다.

VT100 선 그리기 문자 집합으로 전환하는 또 다른 방법(참조:G0 문자 세트 지정:0선화 단계에 들어서서,B라틴어로 돌아가기-1) 인쇄(뭔가)두번째. 하지만 실제 VT100에는 화살표 키가 표시되지 않습니다."HT", 가로 탭의 경우):

여기에 이미지 설명을 입력하세요.

그러나 일부 "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
};

첫 번째 줄은 그들이 변경한 내용입니다(주석은 xterm에서 수정된 PuTTY에서 온 것입니다). xterm에서 첫 번째 줄을 UTF-8로 렌더링하면 어떤 문자가 있는지 표시됩니다(힌트: 첫 번째 항목은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을 사용하지 않고 다른 인코딩을 사용하기 때문입니다.

관련 정보