プロンプト文字列のリングとエスケープ文字

プロンプト文字列のリングとエスケープ文字

私のプロンプト文字列は、次の文を使用して印刷されます。

printf '\033]0;%s@%s:%s\007' user host /home/user

エスケープ文字(\033)とベル文字(007)が必要なのはなぜですか?同じコマンドを手動で実行すると、何も印刷されません。

エスケープ文字を削除してコマンドを発行すると、

printf '%s@%s:%s' user host /home/user

それは印刷されます、

user@home:/home/user

これは理解しやすくなります。

それでは、文字をエスケープしてどのように\033シェル007プロンプト文字列に変換しますか?

ベストアンサー1

実は、エスケープシーケンス次から始まった最初エスケープ文字\033終わる\007ASCIIESCとASCIIBEL)。

0は次のパラメータです。PSxtermの説明では、セミコロンの後のテキストは次のとおりです。プラチナ:

        Ps = 0  -> Change Icon Name and Window Title to Pt.
        Ps = 1  -> Change Icon Name to Pt.
        Ps = 2  -> Change Window Title to Pt.

\033]\007両方部分エスケープシーケンスは次のように変更できます。その他数値。端末はこのバイトペアを単一の制御文字として扱います(4バイトを単一文字\007として使用するのと同じ)。printf引用するXTerm制御シーケンス、この部分C1(8ビット)制御文字助けることができます:

ESC \
     String Terminator (ST  is 0x9c).
ESC ]
     Operating System Command (OSC  is 0x9d).

理解の初期にオペレーティングシステムの制御:

OSC Ps ; Pt ST
OSC Ps ; Pt BEL

使用BEL( \007) エスケープシーケンスを終了するのは例外です。規格を満たしていません(ECMA-48)。オペレーティングシステムの制御はESC ]、または0x9dで始まり、ESC \または0x9cで終わる必要があります。

ずっと前に、xterm開発者はヘッダーを設定するためにエスケープシーケンスを追加しました。 X11R1(1987)では、プログラムは印刷できない文字を取得するまで単にシーケンスを読みました。後でX11R4(1989)で誰かがBEL特徴。標準はそれより古いですが、選択した理由は次のとおりです。BEL代わりにSTまだ明確ではありません。結局のところ、問題は1990年代後半に次のいずれかを認識することによって解決されました。BEL多くのユーザーがハードコーディングされた動作に依存するため、代替として使用BEL)。

おすすめ記事