#Linux學習筆記# 自定義shell終端提示符


我使用的Linux發行版是LinuxMint 17.2 Rafaela默認情況下Terminal中的shell提示包括了用戶名、主機名、當前目錄(絕對路徑)和提示符。這樣會導致當進入一個比較深的目錄時,提示符太長(如下圖所示),操作起來就不太方便了。

 

 我們可以自定義Linux系統終端提示符Linux系統終端提示符的特征由系統環境變量PS1(是“prompt string one” 的簡寫)定義。通過命令echo $PS1查看當前設置。從上圖可以看到我的Linux機器上該環境變量PS1的值。下面我們通過改變環境變量PS1的值來將shell提示符設置得更加清爽點。

1.基本轉義字符

PS1的值由一系列靜態文本或\和轉義字符序列組成,如:

 $ PS1=”\u@\H \w$ ”

 表1: Shell 提示符中用到的轉義字符

序列

顯示值

\a

以 ASCII 格式編碼的鈴聲 當遇到這個轉義序列時,計算機會發出嗡嗡的響聲。

\d

以日,月,天格式來表示當前日期。例如,“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原始的提示符,缺少了顏色,不太美觀。下面我們來學習如何添加顏色。大多數終端仿真器程序支持一定的非打印字符序列來控制,比方說字符屬性(像顏色,黑體和可怕的閃爍) 和光標位置。

2.字體顏色

字體顏色是由一個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.背景顏色

除了字體顏色,我們也可以設置字體的背景顏色。同樣是通過轉義的控制編碼來實現,下表是背景顏色的控制編碼。

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 

淺灰色

4.移動光標:

轉義編碼也可以用來定位光標。這些編碼通常被用來,每次當提示符出現的時候,會在屏幕的不同位置,比如說上面一個角落,顯示一個時鍾或者其它一些信息。下表是一系列用來定位光標的轉義編碼:

14-4: 光標移動轉義序列

轉義編碼

行動

\033[l;cH 

把光標移到第 行,第 列。

\033[nA 

把光標向上移動 行。

\033[nB 

把光標向下移動 行。

\033[nC 

把光標向前移動 個字符。

\033[nD 

把光標向后移動 個字符。

\033[2J 

清空屏幕,把光標移到左上角(第零行,第零列)。

\033[K 

清空從光標位置到當前行末的內容。

\033[s 

存儲當前光標位置。

\033[u 

喚醒之前存儲的光標位置。

5.保存提示符

我們在當前打開的Terminal中設置環境變量PS1的值來自定義的終端提示符,只在當前Terminal中有效,打開新的Terminal就會采用系統默認的提示符了。我們當讓不希望每次打開Terminal的時候都要重新設置一次SP1環境變量。

~/.bashrc文件會在每次打開一個Terminal之前會被執行一次。於是,我們可以將設置環境變量SP1的命令放到該文件中,便不需要每次都手工再設置一次SP1的值。於是,我們在~/.bashrc配置文件末尾加入下面兩行內容,

PS1="\[\033[01;32m\]\u@\W\$\[\033[00m\] "
export PS1

於是,每次打開Terminal便都會有如下提示符效果,

6.示例

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\] '

效果如下:

 

 

參考:

http://billie66.github.io/TLCL/book/chap14.html

 

**版本聲明:該博文為博主原創,如需轉載,請事先征求博主同意。

(done)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM