在Linux終端中自定義Bash配色和提示內容
現今,大多數(如果不是全部的話)現代 Linux 發行版的默認 shell 都是 Bash。然而,你可能已經注意到這樣一個現象,在各個發行版中,其終端配色和提示內容都各不相同。
如果你一直都在考慮,或者只是一時好奇,如何定制可以使 Bash 更好用。不管怎樣,請繼續讀下去 —— 本文將告訴你怎么做。
PS1 Bash 環境變量
命令提示符和終端外觀是通過一個叫 PS1 的變量來進行管理的。根據 Bash 手冊頁說明,PS1 代表了 shell 準備好讀取命令時顯示的主體的提示字符串。
PS1 所允許的內容包括一些反斜杠轉義的特殊字符,可以查看手冊頁中 PRMPTING 部分的內容來了解它們的含義。
為了演示,讓我們先來顯示下我們系統中 PS1 的當前內容吧(這或許看上去和你們的有那么點不同):
- $ echo $PS1
- [\u@\h \W]\$
現在,讓我們來了解一下怎樣自定義 PS1 吧,以滿足我們各自的需求。
自定義 PS1 格式
根據手冊頁 PROMPTING 章節的描述,下面對各個特殊字符的含義作如下說明:
- \u: 顯示當前用戶的 用戶名。
- \h: 完全限定域名 Fully-Qualified Domain Name(FQDN)中第一個點(.)之前的主機名。
- \W: 當前工作目錄的基本名,如果是位于 $HOME (家目錄)通常使用波浪符號簡化表示(~)。
- \$: 如果當前用戶是 root,顯示為 #,否則為 $。
例如,如果我們想要顯示當前命令的歷史數量,可以考慮添加 \!;如果我們想要顯示 FQDN 全稱而不是短服務器名,那么可以考慮添加 \H。
在下面的例子中,我們同時將這兩個特殊字符引入我們當前的環境中,命令如下:
- PS1="[\u@\H \W \!]\$"
當按下回車鍵后,你將會看到提示內容會變成下面這樣??梢詫Ρ葓绦忻钚薷那昂托薷暮蟮奶崾緝热荩?nbsp;
自定義 Linux 終端提示符 PS1
現在,讓我們再深入一點,修改命令提示符中的用戶名和主機名 —— 同時修改文本和環境背景。
實際上,我們可以對提示符進行 3 個方面的自定義:
文本格式 | 前景色(文本) | 背景色 |
---|---|---|
0: 常規文本 | 30: 黑色 | 40: 黑色 |
1: 加粗文本 | 31: 紅色 | 41: 紅色 |
4: 下劃線文本 | 32: 綠色 | 42: 綠色 |
33: 黃色 | 43: 黃色 | |
34: 藍色 | 44: 藍色 | |
35: 紫色 | 45: 紫色 | |
36: 青色 | 46: 青色 | |
37: 白色 | 47: 白色 |
我們將在開頭使用 \e 特殊字符,跟著顏色序列,在結尾使用 m 來表示結束。
在該序列中,三個值(背景,格式和前景)由分號分隔(如果不賦值,則假定為默認值)。
建議閱讀: 在 Linux 中學習 Bash shell 腳本。
此外,由于值的范圍不同,指定背景,格式,或者前景的先后順序沒有關系。
例如,下面的 PS1 將導致提示符為黃色帶下劃線文本,并且背景為紅色:
- PS1="\e[41;4;33m[\u@\h \W]$ "
修改 Linux 終端提示符配色 PS1
雖然它看起來那么漂亮,但是這個自定義將只會持續到當前用戶會話結束。如果你關閉終端,或者退出本次會話,所有修改都會丟失。
為了讓修改永久生效,你必須將下面這行添加到 ~/.bashrc或者 ~/.bash_profile,這取決于你的版本。
- PS1="\e[41;4;33m[\u@\h \W]$ "
盡情去玩耍吧,你可以嘗試任何色彩,直到找出最適合你的。
(LCTT 譯注:原文的這種設置,不但會影響到提示符,也會影響到輸入和顯示的其它文字,因此應該在 PS1 設置中使用 \e[0m 來結束顏色設置。如:PS1="\e[41;4;33m[\u@\h \W]$\e[0m ")
小結
在本文中,我們講述了如何來自定義 Bash 提示符的配色和提示內容。如果你對本文還有什么問題或者建議,請在下面評論框中寫下來吧。我們期待你們的聲音。
作者簡介:
Aaron Kili 是一位 Linux 及 F.O.S.S 的狂熱愛好者,一位未來的 Linux 系統管理員,web 開發者,而當前是 TechMint 的原創作者,他熱愛計算機工作,并且信奉知識分享。