2017-05-04 83 views
0

假設我正在重新安裝Debian,Jessie(或Wheezy)。作爲一個普通用戶,我有在/etc/bash.bashrc文件中定義的提示,最終由一個在我/home/foobar/.bashrcDebian .bashrc:提示PS1

好了,冷靜,所以我有類似的東西覆蓋:[email protected]:~$ 現在,我正在努力瞭解下面的代碼:

# If this is an xterm set the title to [email protected]:dir 
case "$TERM" in 
xterm*|rxvt*) 
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1" 
    ;; 
*) 
    ;; 
esac 

正如你所看到的,PS1變量(=提示)似乎有再次overrided(原因是啊,我在xterm我)。但我不明白爲什麼我們還有另一個$PS1在行末!

爲了得到這一點,我已經把3個字母a在這一行bc

PS1="a\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]b$PS1 c" 

而現在,我有下面的怪提示:

[email protected]:~$ c 

如此看來幾乎整條線都不能使用,所有的線束之間都是這樣。

  • 這是一種條件語句嗎?
  • 這條線的目的是什麼?
  • 爲什麼評論談論xterm窗口的標題,但似乎 只覆蓋PS1?我通過PuTTY運行這個xterm;在Ubuntu的,這條線是完全不同的 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
+0

這是Debian長期以來屢屢發生的故障之一,它將用戶家中的文件搞亂。條件語句是Bash的參數擴展,這裏很好地解釋了這一點:http://wiki.bash-hackers.org/syntax/pe – ceving

+0

這對了解如何調整Bash提示可能很有用:http://www.tldp .org/HOWTO/Bash-Prompt-HOWTO/ – ceving

+1

最後的'$ PS1'可以讓PS1先前被定義,這只是將文本前置到它而不是替換它。 –

回答

2

\[\]之間的部分似乎是其由終端處理的轉義序列:這是在下面的鏈接命名OSC爲操作系統命令ESC ]xterm escape sequence

OSC Ps ; Pt ST 
     Set Text Parameters. For colors and font, if Pt is a "?", the 
     control sequence elicits a response which consists of the con- 
     trol sequence which would set the corresponding value. The 
     dtterm control sequences allow you to determine the icon name 
     and window title. 
     Ps = 0 -> Change Icon Name and Window Title to Pt. 

它是改變xterm窗口標題。

由於窗口標題包含當前工作目錄設置,提示允許在cd命令後更改目錄時更新標題。

+0

哇,我很印象深刻,你在哪裏找到這個?!因此,所有這些大系列僅僅是爲了*終端而在'PS1'變量中放入一個轉義序列*,但是在提示符中不可見*。這太瘋狂了。謝謝! –

+0

請注意'\ [... \]'對使用不正確;應該包含shell的轉義序列(比如'\ u','\ h'等),也不應該包含任何可打印的字符。據我所知,應該包含的* only *事物是'\ e [0;'序列。來自@ceving提供的鏈接中的 – chepner

+0

,http://www.tldp。org/HOWTO/Bash-Prompt-HOWTO/xterm-title-bar-manipulations.html給出了相同的例子。看起來'\ u'' \ h'序列在被髮送到xterm之前被shell處理,'\ e'或'\ 033'被八進制的'esc' ASCII 27或33替代。 –