這裡教您如何自訂 Linux 的 Bash Shell 命令提示字串,打造屬於自己的命令列環境。
許多的 Linux 使用者在使用命令列時,可能從來就沒有想過命令提示字串可以做些什麼事情,甚至根本就把它忽略了,其實一個良好的命令提示字串可以改善終端機的使用者經驗,讓終端機不再只是死板板的文字而已,有時候還會非常有趣。
基本設定方法
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="u@h [t]> "
而 @
則是可以顯示 12 小時制的時間:
PS1="[@] u@h> "
任意指令輸出
如果您對於 shell 的程式設計很熟悉的話,可以在 PS1
插入任何的指令輸出或是變數:
kernel_version=$(uname -r) PS1="!|h|$kernel_version|$?> "
這裡我們將 uname -r
的輸出儲存在 $kernel_version
變數中,在插入 PS1
,而 $?
則是 shell 中的一個特殊變數,它會儲存上一個指令的執行傳回值,另外一個 !
則是目前指令的歷史紀錄編號。結果會像這樣:
文字顏色
命令提示字串也可以使用彩色的文字:
PS1="e[0;34mu@h w> e[m"
這裡文字的色彩是靠 ANSI escape code 來指定的,e[0;34m
是顏色指定的開始控制碼,結束是 e[0m
,而在放這中間的所有文字都會是有顏色的,而文字的顏色則是由開始控制碼中的數值來決定:
0
與1
:0
代表正常亮度,1
代表高亮度。30
與37
:30
+x
所得到的數值可指定前景顏色(x
值與顏色的對應請參考下面的對應表)。40
與47
:40
+x
所得到的數值可指定背景顏色(x
值與顏色的對應請參考下面的對應表)。
亮度 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
正常 | 黑 | 紅 | 綠 | 黃 | 藍 | 洋紅 | 青 | 白 |
高亮度 | 黑 | 紅 | 綠 | 黃 | 藍 | 洋紅 | 青 | 白 |
多個數值之間以分號(;
)隔開,像這裡的 e[0;34m
就是指定正常亮度(0
),顏色為藍色(34 = 30 + 4
),結果會像這樣:
這是使用高亮度(1
)的狀況:
PS1="e[1;34mu@h w> e[m"
加上背景的顏色:
PS1="e[0;34;47mu@h w> e[m"
使用多種顏色,這個是我自己慣用的提示字串:
PS1='[e[1;32m]u@h[e[m]:[e[1;34m]W[e[1;33m]$[e[m] '
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 namen
:換行。r
:carriage returns
: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
:以八進位表示字元,例如