轉自:herehtml
我使用的Linux發行版是LinuxMint 17.2 Rafaela,默認狀況下Terminal中的shell提示包括了用戶名、主機名、當前目錄(絕對路徑)和提示符。這樣會致使當進入一個比較深的目錄時,提示符太長(以下圖所示),操做起來就不太方便了。shell
咱們能夠自定義Linux系統終端提示符。Linux系統終端提示符的特徵由系統環境變量PS1(是「prompt string one」 的簡寫)定義。經過命令echo $PS1查看當前設置。從上圖能夠看到個人Linux機器上該環境變量PS1的值。下面咱們經過改變環境變量PS1的值來將shell提示符設置得更加清爽點。bash
PS1的值由一系列靜態文本或\和轉義字符序列組成,如:併發
$ PS1=」\u@\H \w$ 」
表1: Shell 提示符中用到的轉義字符學習
序列字體 |
顯示值編碼 |
\acode |
以 ASCII 格式編碼的鈴聲 . 當遇到這個轉義序列時,計算機會發出嗡嗡的響聲。htm |
\dblog |
以日,月,天格式來表示當前日期。例如,「Mon May 26」 |
\h |
本地機的主機名,但不帶末尾的域名。 |
\H |
完整的主機名。 |
\j |
運行在當前 shell 會話中的工做數。 |
\l |
當前終端設備名。 |
\n |
一個換行符。 |
\r |
一個回車符。 |
\s |
shell 程序名。 |
\t |
以24小時制,hours:minutes:seconds 的格式表示當前時間. |
\T |
以12小時製表示當前時間。 |
\@ |
以12小時制,AM/PM 格式來表示當前時間,例如「10:51 PM」。 |
\A |
以24小時制,hours:minutes 格式表示當前時間。 |
\u |
當前用戶名。 |
\v |
shell 程序的版本號,例如4.3。 |
\V |
shell 程序的版本號,例如4.3.11。 |
\w |
當前工做目錄名。 |
\W |
當前工做目錄名的最後部分。 |
\! |
當前命令的歷史號。 |
\# |
當前 shell 會話中的命令數。 |
\$ |
這會顯示一個"$"字符,除非你擁有超級用戶權限。在那種狀況下, 它會顯示一個"#"字符。 |
\[ |
標誌着一系列一個或多個非打印字符的開始。這被用來嵌入非打印的控制字符,這些字符以某種方式來操做終端仿真器,比方說移動光標或者是更改文本顏色。 |
\] |
標誌着非打印字符序列結束。 |
例如我如今想讓提示符顯示格式爲:「<用戶名>@<當前目錄名> $ 」,則
$ PS1=」\u@\W\$ 」
效果以下所示,
上面可以知足咱們的效果了,可是相對於LinuxMint原始的提示符,缺乏了顏色,不太美觀。下面咱們來學習如何添加顏色。大多數終端仿真器程序支持必定的非打印字符序列來控制,比方說字符屬性(像顏色,黑體和可怕的閃爍) 和光標位置。
字體顏色是由一個ANSI 轉義編碼來控制的。該控制編碼會嵌入字符流中併發送給終端仿真器。可是,該控制編碼不會被「打印」到屏幕上,而是會被終端解釋爲一個指令。正如咱們在上表看到的字符序列, 這個 \[ 和 \] 序列被用來封裝這些非打印字符。一個 ANSI 轉義編碼以一個八進制033(這個編碼是由 退出按鍵產生的)開頭,其後跟着一個可選的字符屬性(0:正常、1:黑體、4:下劃線、5:閃爍、7:反向(前景色和背景色反轉)),在以後是一個指令。
表14-2: 用轉義序列來設置文本顏色
序列 |
文本顏色 |
序列 |
文本顏色 |
\033[0;30m |
黑色 |
\033[1;30m |
深灰色 |
\033[0;31m |
紅色 |
\033[1;31m |
淺紅色 |
\033[0;32m |
綠色 |
\033[1;32m |
淺綠色 |
\033[0;33m |
棕色 |
\033[1;33m |
黃色 |
\033[0;34m |
藍色 |
\033[1;34m |
淺藍色 |
\033[0;35m |
粉紅 |
\033[1;35m |
淺粉色 |
\033[0;36m |
青色 |
\033[1;36m |
淺青色 |
\033[0;37m |
淺灰色 |
\033[1;37m |
白色 |
例如咱們來設置一個同LinuxMint默認的綠色提示符,
$ PS1="\[\033[01;32m\]\u@\W\$\[\033[00m\] "
因而,咱們便有了下面的效果。
上面跟設置的提示符格式中的最後那個」\[\033[00m\]」是用於將後續的字符顏色還原回原來的顏色。若是沒有沒有加最後這個轉義碼,則會出現下面結果(咱們本身手工輸入的命令也都將是綠色的)。
除了字體顏色,咱們也能夠設置字體的背景顏色。一樣是經過轉義的控制編碼來實現,下表是背景顏色的控制編碼。
表3: 用轉義序列來設置背景顏色
\033[0;40m |
黑色 |
\033[1;44m |
藍色 |
\033[0;41m |
紅色 |
\033[1;45m |
粉紅 |
\033[0;42m |
綠色 |
\033[1;46m |
青色 |
\033[0;43m |
棕色 |
\033[1;47m |
淺灰色 |
轉義編碼也能夠用來定位光標。這些編碼一般被用來,每次當提示符出現的時候,會在屏幕的不一樣位置,好比說上面一個角落,顯示一個時鐘或者其它一些信息。下表是一系列用來定位光標的轉義編碼:
表14-4: 光標移動轉義序列
轉義編碼 |
行動 |
\033[l;cH |
把光標移到第 l 行,第 c 列。 |
\033[nA |
把光標向上移動 n 行。 |
\033[nB |
把光標向下移動 n 行。 |
\033[nC |
把光標向前移動 n 個字符。 |
\033[nD |
把光標向後移動 n 個字符。 |
\033[2J |
清空屏幕,把光標移到左上角(第零行,第零列)。 |
\033[K |
清空從光標位置到當前行末的內容。 |
\033[s |
存儲當前光標位置。 |
\033[u |
喚醒以前存儲的光標位置。 |
咱們在當前打開的Terminal中設置環境變量PS1的值來自定義的終端提示符,只在當前Terminal中有效,打開新的Terminal就會採用系統默認的提示符了。咱們當讓不但願每次打開Terminal的時候都要從新設置一次SP1環境變量。
~/.bashrc文件會在每次打開一個Terminal以前會被執行一次。因而,咱們能夠將設置環境變量SP1的命令放到該文件中,便不須要每次都手工再設置一次SP1的值。因而,咱們在~/.bashrc配置文件末尾加入下面兩行內容,
PS1="\[\033[01;32m\]\u@\W\$\[\033[00m\] " export PS1
因而,每次打開Terminal便都會有以下提示符效果,
(1)格式:「<用戶名>@<當前目錄名>$」
$ PS1="\u@\W\$ "
效果以下:
(2)添加下劃線:
$ PS1="\[\033[4;37m\]\u@\W\$\[\033[00m\] "
效果以下:
(3)前景色爲綠色:
$ PS1="\[\033[0;32m\]\u@\W\$\[\033[00m\] "
效果以下:
(4)前景色爲綠色,背景色爲紅色:
$ PS1="\[\033[0;41m\033[1;32m\]\u@\W\$\[\033[00m\] "
效果以下:
(5)設置一個超級複雜的,經過移動光標來設置一個每次顯示提示符的時候都在當前Terminal的第一行顯示當前時間。
$ PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\033[1;32m\]\u@\W\$ \[\033[00m\] '
效果以下: