在這一章中,我們將會(huì)看一下表面上看來(lái)很瑣碎的細(xì)節(jié)-shell 提示符。但這會(huì)揭示一些 shell 和 終端仿真器的內(nèi)部工作方式。
和 linux 內(nèi)的許多程序一樣,shell 提示符是可高度配置的,雖然我們把它相當(dāng)多地看作是理所當(dāng)然的, 但是我們一旦學(xué)會(huì)了怎樣控制它,shell 提示符是一個(gè)相當(dāng)有用的工具。
解剖一個(gè)提示符
我們默認(rèn)的提示符看起來(lái)像這樣:
[me@linuxbox ~]$
注意它包含我們的用戶名,主機(jī)名和當(dāng)前工作目錄,但是它又是怎樣得到這些東西的呢? 結(jié)果證明非常簡(jiǎn)單。提示符是由一個(gè)環(huán)境變量定義的,叫做 PS1(是“prompt string one” 的簡(jiǎn)寫(xiě))。我們可以通過(guò) echo 命令來(lái)查看 PS1的內(nèi)容。
[me@linuxbox ~]$ echo $PS1 [\u@h W]$
注意:如果你 shell 提示符的內(nèi)容和上例不是一模一樣,也不必?fù)?dān)心。每個(gè) Linux 發(fā)行版 定義的提示符稍微有點(diǎn)不同,其中一些相當(dāng)異于尋常。
從輸出結(jié)果中,我們看到那個(gè) PS1 環(huán)境變量包含一些這樣的字符,比方說(shuō)中括號(hào),@符號(hào),和美元符號(hào), 但是剩余部分就是個(gè)謎。我們中一些機(jī)敏的人會(huì)把這些看作是由反斜杠轉(zhuǎn)義的特殊字符,就像我們 在第八章中看到的一樣。這里是一部分字符列表,在提示符中 shell 會(huì)特殊對(duì)待這些字符:
試試一些可替代的提示符設(shè)計(jì)
參照這個(gè)特殊字符列表,我們可以更改提示符來(lái)看一下效果。首先, 我們把原來(lái)提示符字符串的內(nèi)容備份一下,以備之后恢復(fù)原貌。為了完成備份, 我們把已有的字符串復(fù)制到另一個(gè) shell 變量中,這個(gè)變量是我們自己創(chuàng)造的。
[me@linuxbox ~]$ ps1_old="$PS1"
我們新創(chuàng)建了一個(gè)叫做 ps1_old 的變量,并把變量 PS1的值賦 ps1_old。通過(guò) echo 命令可以證明 我們的確復(fù)制了 PS1的值。
[me@linuxbox ~]$ echo $ps1_old [\u@h W]$
在終端會(huì)話中,我們能在任一時(shí)間復(fù)原提示符,只要簡(jiǎn)單地反向操作就可以了。
[me@linuxbox ~]$ PS1="$ps1_old"
現(xiàn)在,我們準(zhǔn)備開(kāi)始,讓我們看看如果有一個(gè)空的字符串會(huì)發(fā)生什么:
[me@linuxbox ~]$ PS1=
如果我們沒(méi)有給提示字符串賦值,那么我們什么也得不到。根本沒(méi)有提示字符串!提示符仍然在那里, 但是什么也不顯示,正如我們所要求的那樣。我們將用一個(gè)最小的提示符來(lái)代替它:
PS1="$ "
這樣要好一些。至少能看到我們?cè)谧鍪裁础W⒁怆p引號(hào)中末尾的空格。當(dāng)提示符顯示的時(shí)候, 這個(gè)空格把美元符號(hào)和光標(biāo)分離開(kāi)。
在提示符中添加一個(gè)響鈴:
$ PS1="a$ "
現(xiàn)在每次提示符顯示的時(shí)候,我們應(yīng)該能聽(tīng)到嗡嗡聲。這會(huì)變得很煩人,但是它可能會(huì) 很有用,特別是當(dāng)一個(gè)需要運(yùn)行很長(zhǎng)時(shí)間的命令執(zhí)行完后,我們要得到通知。
下一步,讓我們?cè)囍鴦?chuàng)建一個(gè)信息豐富的提示符,包含主機(jī)名和當(dāng)天時(shí)間的信息。
$ PS1="A h $ " 17:33 linuxbox $
試試其他上表中列出的轉(zhuǎn)義序列,看看你能否想出精彩的新提示符。






