修改Linux Shell命令提示字元

2020-07-16 10:04:47
Shell 通過PS1PS2這兩個環境變數來控制提示符的格式,修改PS1PS2的值就能修改命令提示字元的格式。
  • PS1 控制最外層的命令提示字元格式。
  • PS2 控制第二層的命令提示字元格式。

在修改 PS1 和 PS2 之前,我們先用 echo 命令輸出它們的值,看看預設情況下是什麼樣子的:
[[email protected] ~]$ echo $PS1
[[email protected] W]$
[[email protected] ~]$ echo $PS2
>
Linux 使用以為前導的特殊字元來表示命令提示字元中包含的要素,這使得 PS1 和 PS2 的格式看起來可能有點奇怪。下表展示了可以在 PS1 和 PS2 中使用的特殊字元。

Bash shell 命令提示字元可以包含的要素
字元 描述
a 鈴聲字元
d 格式為“日 月 年”的日期
e ASCII 跳脫字元
h 本地主機名
H 完全合格的限定域主機名
j shell 當前管理的作業數
1 shell 終端裝置名的基本名稱
n ASCII 換行字元
r ASCII 回車
s shell 的名稱
t 格式為“小時:分鐘:秒”的24小時製的當前時間
T 格式為“小時:分鐘:秒”的12小時製的當前時間
@ 格式為 am/pm 的12小時製的當前時間
u 當前使用者的使用者名稱
v bash shell 的版本
V bash shell 的發布級別
w 當前工作目錄
W 當前工作目錄的基本名稱
! 該命令的 bash shell 歷史數
# 該命令的命令數量
$ 如果是普通使用者,則為美元符號$;如果超級使用者(root 使用者),則為井號#
nnn 對應於八進位制值 nnn 的字元
斜槓
[ 控制碼序列的開頭
] 控制碼序列的結尾

注意,所有的特殊字元均以反斜槓開頭,目的是與普通字元區分開來。您可以在命令提示字元中使用以上任何特殊字元的組合。

【範例】通過修改 PS1 變數的值來修改命令提示字元的格式:
[[email protected] ~]$ PS1="[t][u]$ "
[12:51:43][mozhiyan]$ PS1="[c.biancheng.net]$ "
[c.biancheng.net]$ 
第一次修改後可以顯示當前的時間和使用者名稱,第二次修改後顯示C語言中文網的域名。為了保留版權,證明該教學出自C語言中文網,後續文章中我經常會使用[c.biancheng.net]$ 這種命令提示字元,大家不要覺得奇怪。

遺憾的是,通過這種方式修改的命令提示字元只在當前的 Shell 對談期間有效,再次啟動 Shell 後將重新使用預設的命令提示字元。

如果希望永續性地修改 PS1,讓它對任何 Shell 對談都有效,那麼就得把 PS1 變數的修改寫入到 Shell 啟動檔案中,我們將在《編寫自己的Shell組態檔》一節中展開討論。