如何在 Linux 或 Unix 操作系統下更改 shell 提示的顏色?如何在 Linux、macOS 或類 Unix 系統上自定義和著色我的 Bash 提示符 PS1?
我們可以更改 shell 提示符的顏色,或者在命令提示符下讓工作變得更輕鬆。BASH shell 是 Linux 和 Apple OS X 下的預設的設置。現在讓我們看看在 Linux 或 Unix 系統上使用 bash 時如何更改 shell 提示的顏色。
基本設定方法
Linux 的" Bash Shell 命令提示字串可以透過 PS1 這個環境變數來設定,通常他都是寫在 ~/.bashrc 或是 ~/.bash_profile 這些 Bash 的設定檔中,通常預設的設定會類似這樣:
PS1="\u@\h \W$ "在 PS1 的設定中,若以反斜線加上一個特定字母,都有一些特殊意義:
- \u:表使用者的帳號名稱。
- \h:主機名稱。
- \W:目前的工作目錄名稱。
顯示出來的結果會像這樣:
通常剛裝好的 Linux 系統,命令提示字串大概就是像這樣,沒有什麼特別,但是其實它的功能很強大,可以有很多的變化,以下是一些常用的功能介紹。
顯示時間
在 PS1 環境變數中,您可以使用 $(linux_command) 的方式,直接執行任何的 Linux 指令,下面是一個執行 $(date) 來顯示目前時間的例子。
PS1="\u@\h [$(date +%k:%M:%S)]> "結果會像這樣:
另一種方式是直接使用 \t,則可以顯示 hh:mm:ss 格式的時間,例如:
PS1="[\t] \u@$(pwd)> "而 \@ 則是可以顯示 12 小時制的時間:
PS1="[\@] \u@$(pwd)> "
任意指令輸出
如果您對於 shell 的程式設計很熟悉的話,可以在 PS1 插入任何的指令輸出或是變數:
kernel_version=$(uname -r) PS1="\!|\h|$kernel_version|$? > "
文字顏色
命令提示字串也可以使用彩色的文字:
PS1="\e[0;34m\u@\h \w\e[0m > "這裡文字的色彩是靠 ANSI escape code 來指定的,\e[0;34m 是顏色指定的開始控制碼,結束是 \e[0m,而在放這中間的所有文字都會是有顏色的,而文字的顏色則是由開始控制碼中的數值來決定:
0 與 1:0 代表正常亮度,1 代表高亮度。 30 與 37:30 + x 所得到的數值可指定前景顏色(x 值與顏色的對應請參考下面的對應表)。 40 與 47:40 + x 所得到的數值可指定背景顏色(x 值與顏色的對應請參考下面的對應表)。 多個數值之間以分號(;)隔開,像這裡的 \e[0;34m 就是指定正常亮度(0),顏色為藍色(34 = 30 + 4),結果會像這樣:
這是使用高亮度(1)的狀況:
PS1="\e[1;34m\u@\h \w\e[0m > "加上背景的顏色:
PS1="\e[0;34;47m\u@\h \w\e[0m > "使用多種顏色:
PS1='\e[1;37m\t\e[0m\n\e[1;32m\u\e[1;33m@\e[1;32m\h\e[33m:\e[1;36m$(pwd)\e[1;33m\$\e[0m '
PS1 特殊字元
以下這些是在 PS1 中可以使用的特殊字元,您可以用運這些設計自己的命令提示字串。
- \a:ASCII bell 字元(07)。
- \d:格式為 Weekday Month Date 的日期(例如 Tue May 26)。
- \D{format}:將 format 傳給 strftime(3),然後將輸出的結果放進命令提示字串中,如果 format 是空字串,就會使用目前語系的預設的格式,其中的大括號不可以省略。
- \e:ASCII 跳脫字元(escape character,033)。
- \h:機器的簡短主機名稱(hostname),只顯示到第一個句點之前。
- \H:機器的完整主機名稱(hostname)。
- \j:目前的 shell 所掌控的 jobs 數量。
- \l:the basename of the shell’s terminal device name。
- \n:換行。
- \r:carriage return。
- \s:the name of the shell, the basename of $0 (the portion following the final slash)。
- \t:現在時間,24 小時制(HH:MM:SS)。
- \T:現在時間,12 小時制(HH:MM:SS)。
- \@:現在時間,12 小時制(HH:MM AM/PM)。
- \A:現在時間,24 小時制(HH:MM)。
- \u:目前使用者的使用者名稱(username)。
- \v:目前的 bash shell 版本(如 2.00)。
- \V:目前的 bash shell 詳細版本(如 2.00.0)。
- \w:目前的工作目錄完整路徑,若在 $HOME 中,則以 ~ 顯示。
- \W:目前的工作目錄名稱,若在 $HOME 中,則以 ~ 顯示。
- \!:目前指令的歷史紀錄編號。
- \#:目前指令的編號。
- \$:如果是 root 管理者,則顯示 #,否則顯示 $。
- \n:以八進位表示字元,例如 33。the character corresponding to the octal number nnn。
- \\:反斜線。
- [ 與 ]:當 PS1 參雜一些無法顯示的字元時,就要用這兩個特殊字元包起來,這樣顯示才會正常,例如所有控制顏色或是格式的控制碼,都要加上這兩個特殊字元,這樣可以避免 bash 在計算提示字元長度時出錯。
只要善用這些特殊字元,其實就可以讓自己的命令提示字串有許多的變化。