概述
用戶進入 Bash 以后,Bash 會顯示一個命令提示符,用來提示用戶在該位置后面輸入命令。
環境變量 PS1
命令提示符通常是美元符號$
,對於根用戶則是井號#
。這個符號是環境變量PS1
決定的,執行下面的命令,可以看到當前命令提示符的定義。
$ echo $PS1
Bash 允許用戶自定義命令提示符,只要改寫這個變量即可。改寫后的PS1
,可以放在用戶的 Bash 配置文件.bashrc
里面,以后新建 Bash 對話時,新的提示符就會生效。要在當前窗口看到修改后的提示符,可以執行下面的命令。
$ source ~/.bashrc
命令提示符的定義,可以包含特殊的轉義字符,表示特定內容。
\a
:響鈴,計算機發出一記聲音。\d
:以星期、月、日格式表示當前日期,例如“Mon May 26”。\h
:本機的主機名。\H
:完整的主機名。\j
:運行在當前 Shell 會話的工作數。\l
:當前終端設備名。\n
:一個換行符。\r
:一個回車符。\s
:Shell 的名稱。\t
:24小時制的hours:minutes:seconds
格式表示當前時間。\T
:12小時制的當前時間。\@
:12小時制的AM/PM
格式表示當前時間。\A
:24小時制的hours:minutes
表示當前時間。\u
:當前用戶名。\v
:Shell 的版本號。\V
:Shell 的版本號和發布號。\w
:當前的工作路徑。\W
:當前目錄名。\!
:當前命令在命令歷史中的編號。\#
:當前 shell 會話中的命令數。\$
:普通用戶顯示為$
字符,根用戶顯示為#
字符。\[
:非打印字符序列的開始標志。\]
:非打印字符序列的結束標志。
舉例來說,[\u@\h \W]\$
這個提示符定義,顯示出來就是[user@host ~]$
(具體的顯示內容取決於你的系統)。
[user@host ~]$ echo $PS1
[\u@\h \W]\$
改寫PS1
變量,就可以改變這個命令提示符。
$ PS1="\A \h \$ "
17:33 host $
注意,$
后面最好跟一個空格,這樣的話,用戶的輸入與提示符就不會連在一起。
顏色
默認情況下,命令提示符是顯示終端預定義的顏色。Bash 允許自定義提示符顏色。
使用下面的代碼,可以設定其后文本的顏色。
\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
:白色
舉例來說,如果要將提示符設為紅色,可以將PS1
設成下面的代碼。
PS1='\[\033[0;31m\]<\u@\h \W>\$'
但是,上面這樣設置以后,用戶在提示符后面輸入的文本也是紅色的。為了解決這個問題, 可以在結尾添加另一個特殊代碼\[\033[00m\]
,表示將其后的文本恢復到默認顏色。
PS1='\[\033[0;31m\]<\u@\h \W>\$\[\033[00m\]'
除了設置前景顏色,Bash 還允許設置背景顏色。
\033[0;40m
:藍色\033[1;44m
:黑色\033[0;41m
:紅色\033[1;45m
:粉紅\033[0;42m
:綠色\033[1;46m
:青色\033[0;43m
:棕色\033[1;47m
:淺灰色
下面是一個帶有紅色背景的提示符。
PS1='\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] '
環境變量 PS2,PS3,PS4
除了PS1
,Bash 還提供了提示符相關的另外三個環境變量。
環境變量PS2
是命令行折行輸入時系統的提示符,默認為>
。
$ echo "hello
> world"
上面命令中,輸入hello
以后按下回車鍵,系統會提示繼續輸入。這時,第二行顯示的提示符就是PS2
定義的>
。
環境變量PS3
是使用select
命令時,系統輸入菜單的提示符。
環境變量PS4
默認為+
。它是使用 Bash 的-x
參數執行腳本時,每一行命令在執行前都會先打印出來,並且在行首出現的那個提示符。
比如下面是腳本test.sh
。
#!/bin/bash
echo "hello world"
使用-x
參數執行這個腳本。
$ bash -x test.sh
+ echo 'hello world'
hello world
上面例子中,輸出的第一行前面有一個+
,這就是變量PS4
定義的。