PS1の.bashrcにある\ [\ e] 0;の意味

PS1の.bashrcにある\ [\ e] 0;の意味

存在する.bashrc

case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

理解${debian_chroot:+($debian_chroot)}\u@\h: \wが理解できません\[\e]0;。それは何をしますか?

答え1

これはASCII 27(ESC)で置き換えられた\e]0;エスケープシーケンス\eなので、端末はxtermにBEL()で終わるESC ] 0 ;アイコンとタイトルバーを設定するように指示する4文字を受け取ります。\a

したがって、このシーケンスは\e]0;STUFFGOESHERE\a端末のヘッダーをSTUFFGOESHEREに設定します。あなたの例では、ヘッダーをuser / host / pathに設定します。

FWIW、xtermエスケープシーケンスは、次の場所に文書化されています。https://www.x.org/docs/xterm/ctlseqs.pdf

答え2

\e]0;行の文字

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

シェルによって解釈される(\eASCII \033ESCと同じ)脱出する特徴)、スタート脱出シーケンス。注文終わるon \a(シェル \007` ASCII BEL としても解釈される)ベル)。

これは0パラメータです(いわゆるオペレーティングシステムコマンド)、端末にアイコンとウィンドウのタイトルを変更するように指示します。

技術的には(ECMA-48)でなければなりません\e\\が、最初はそのようには始まりませんでした。 1986年にこの機能が最初に導入されたとき、xtermタイトルは印刷できない最初の文字で終わりました。 1989年のX11R4以降、xtermは文字列ターミネータとして認識されます\a(アイコンとウィンドウのタイトルを区別するために別々のパラメータと1追加された場合2)。

rxvt私は数年後にこれを発見し、数年後にxtermを次のように修正しました。返品標準文字列ターミネータを受け入れます。変更ログには特に言及されていませんが、ctlseqs.ms1996年8月に初めて登場しました。通常、機能は他の端末が実装した場合にのみ許可されます\a

末尾がないと、孤立したエスケープ文字は、端末固有の方法(テキスト全体を無視することを含む)でエラーとして扱われる可能性があります。

追加資料:

編集:タイプミス

関連情報