Bash

的意思 和和e0;在 PS1 中的 .bashrc

  • December 17, 2020

.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\033ASCII ESC轉義字元),開始一個轉義序列。序列結束\a(同樣由 shell \007` ASCII BEL bell解釋)。

0是一個參數(用於所謂的作業系統命令),它告訴終端更改圖示和視窗標題。

從技術上講,它應該是\e\\(ECMA-48),但它不是這樣開始的。1986 年首次引入該功能時,xterm在第一個非印刷字元上終止了標題。自 1989 年的\aX11R4 以來,xterm 已將其辨識為字元串終止符(當時添加了單獨的參數以區分圖示12視窗標題)。

rxvt幾年後選擇了這個,幾年後 xterm 被修改為接受標準的字元串終止符。更新日誌中沒有特別指出,但它首先出現在ctlseqs.ms1996 年 8 月。通常當其他終端實現了他們\a只接受的功能時。

如果沒有結尾,孤立的轉義字元可以以終端特定的方式被視為錯誤(包括完全忽略文本)。

進一步閱讀:

編輯:修正錯字

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