Bash
的意思 和和e0;在 PS1 中的 .bashrc
在
.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;
。它有什麼作用?
是
\e]0;
一個轉義序列;\e
替換為 ASCII 27 (ESC),因此終端接收到的 4 個字元ESC ] 0 ;
告訴 xterm 設置圖示和標題欄,以 BEL (\a
) 結尾。所以序列
\e]0;STUFFGOESHERE\a
會將終端的標題設置為 STUFFGOESHERE。在您的範例中,它將標題設置為使用者/主機/路徑。FWIW,xterm 轉義序列記錄在:https ://www.x.org/docs/xterm/ctlseqs.pdf
\e]0;
行中的字元PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
由 shell 解釋(等同
\e
於\033
ASCII ESC轉義字元),開始一個轉義序列。序列結束於\a
(同樣由 shell \007` ASCII BEL bell解釋)。這
0
是一個參數(用於所謂的作業系統命令),它告訴終端更改圖示和視窗標題。從技術上講,它應該是
\e\\
(ECMA-48),但它不是這樣開始的。1986 年首次引入該功能時,xterm
在第一個非印刷字元上終止了標題。自 1989 年的\a
X11R4 以來,xterm 已將其辨識為字元串終止符(當時添加了單獨的參數以區分圖示1
和2
視窗標題)。
rxvt
幾年後選擇了這個,幾年後 xterm 被修改為也接受標準的字元串終止符。更新日誌中沒有特別指出,但它首先出現在ctlseqs.ms
1996 年 8 月。通常當其他終端實現了他們\a
只接受的功能時。如果沒有結尾,孤立的轉義字元可以以終端特定的方式被視為錯誤(包括完全忽略文本)。
進一步閱讀:
編輯:修正錯字