? ? ? ?喜歡玩Linux的人,一般都是一個愛折騰的人,哈哈~~好巧 我就是這么一個愛折騰的人。
? ? ? ?好了,那么接下來的要折騰點什么呢?
? ? ? ?走起。。。下面就開始走入正題:如何在Linux下自定義shell提示符。
介紹
? ? ? ? 最初,所有的shell都是兩個字符:一個字符后跟一個空格。Bourne shell使用一個$(美元字符),C-Shell使用一個%(百分比字符)?,F(xiàn)在,這一傳統(tǒng)仍然保持,因此,如果使用的shell是Bourne shell家族(Bash、Korn shell)中的一員,那么最簡單的shell提示為:$?
? ? ? ? 當今的linux發(fā)行版中,使用最廣泛的shell版本為即為Bourne shell家族的Bash,本文即將討論的也是基于Bash的shell。
? ? ? ? 使用命令 echo $0 或 echo $SHELL 可以查看你當前使用的是哪種shell。如果你使用的是Bash,那么你可以使用 bash --version 來查看你的Bash版本。
環(huán)境
? ? ? ? Ubuntu 16.04.3 LTS 64位 ?(Linux version 4.4.0-97-generic)
? ? ? ? 使用命令:hostnamectl,可以查看當前主機的信息。
shell提示符的修改
? ? ? ? Linux中,shell提示符是由一個環(huán)境變量定義的。對于Bourne shell家族來說,這個環(huán)境變量叫做PS1,我們可以通過 echo 命令來查看 PS1的內容。如:
[14:48:33 root@noseeHost ~]$ echo $PS1
\[\033[0;32m\][\t \u\[\033[0;33m\]@\H \w]$ \[\033[0m\]
? ? ? ? 上面輸出的那個PS1值是我自己設置的,很多看不懂的亂七八糟的數(shù)字、還有一些特殊的字符?不必擔心,看完這篇文章你就會懂了。
? ? ? ? 試試修改一個簡單的提示符,包含主機名和當天時間的信息:
[14:59 root@noseeHost ~]$ PS1="\A \h \$ "
15:00 noseeHost $
? ? ? ? 可以看到命令行的提示符變成了 “15:00 noseeHost $ ”。是的,就是這么簡單,通過修改環(huán)境變量PS1的值,可以實時的改變你的Shell提示符。但是,很快你就會發(fā)現(xiàn),當你下次再登錄上你的主機,或者當你重啟你的主機后,Shell提示符又變回原來的默認樣子了。
? ? ? ? 這是因為系統(tǒng)在每次啟動的時候,都會去讀取一個默認的配置文件,如果你想要你的設置永久生效,那你就需要去直接修改這個文件。
? ? ? ? 不同系統(tǒng)的這個配置文件可以會放在不同和位置和可能是不同的名字,一般是用戶主目錄下的.bashrc文件。為了達到目的,把下面兩行代碼添加到.bashrc文件中即可。
PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ '
export PS1
? ? ? ? 呃,說了這么多,好像還沒說清楚那一個個特殊字符串和數(shù)字怎么回事。為了方便概括,下面就用一個稍微復雜一點的一個提示符來做解剖。
解剖一個提示符
? ? ? ? 首先,設置PS1的值為:
PS1="\[\033[0;32m\][\A \u\[\033[0;33m\]@\H \w]$ \[\033[0m\]"
? ? ? ? 這時你看到的結果如下:

? ? ? ? 1、\[\033[0;32m\]是用于設置文本的顏色,這是一個非打印字符序列(就是它是不會顯示在你的提示符上面,但是會產(chǎn)生一些特殊的效果,如顏色變化)。你看到的 “[15:19 root” 顯示為綠色就是因為它的作用。
? ? ? ? ? ? ? 還有后面的[\033[0;33m\]和\[\033[0m\]都是非打印字符序列。
? ? ? ? 2、\A 和 \u 都是轉義字符,其中\(zhòng)A表示一個24小時制的一個時間表示,\u表示當前登錄的用戶名。
? ? ? ? 3、$,這會顯示一個"$"字符,除非你擁有超級用戶權限。在那種情況下, 它會顯示一個"#"字符。
上面只是通過舉個例子,來加強你對提示符變量PS1的理解。想要更加深刻的理解shell的每個提示符的含義一定要自己親自動手,多去嘗試。下面將會列出幾個附表,一些常用的轉義字符都可以在這里查看。
注意:如果你 shell 提示符的內容和上例不是一模一樣,也不必擔心。每個 Linux 發(fā)行版 定義的提示符稍微有點不同,其中一些相當異乎尋常。
附表1: Shell 提示符中用到的轉義字符

附表2: 用轉義序列來設置文本顏色

附表3: 用轉義序列來設置背景顏色

注意:除了正常的 (0) 和黑體 (1) 字符屬性之外,文本也可以具有下劃線 (4),閃爍 (5), 和反向 (7) 屬性。為了擁有好品味,然而,許多終端仿真器拒絕使用這個閃爍屬性。
附表4:?光標移動轉義序列
? ? ? ? 轉義編碼也可以用來定位光標。這些編碼被普遍地用來,每次當提示符出現(xiàn)的時候,會在屏幕的不同位置 比如說上面一個角落,顯示一個時鐘或者其它一些信息。這里是一系列用來定位光標的轉義編碼:

? ? ? ? 使用上面的編碼,我們將構建一個提示符,每次當這個提示符出現(xiàn)的時候,會在屏幕的上方畫出一個 包含時鐘(由黃色文本渲染)的紅色長條。提示符的編碼就是這個看起來令人敬畏的字符串:
PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ '
? ? ? ? 哈哈,這個很有趣。
參考文獻
《The Linux Command Line》William E. Shotts, Jr. —— 14 – Customizing The Prompt
《Unix&Linux大學教程》Harley Hahn —— 13.9 and 13.10