如何在 Bash 提示符下自定義 Shell 變量 PS1-PS4

當您使用 shell 命令時,您可以看到 Linux 的真正美。 默認情況下,shell 提示符顯示主機名和工作目錄。 使用變量您可以更改命令提示符顏色、顯示、日期時間、用戶名等。您甚至可以在 PS1 變量中運行 shell 腳本,其中 PS 代表提示語句。 我將展示一些使用變量 PS1 更改 Linux 環境的示例。

相關閱讀: 如何在 Linux 中更改 Bash Shell 提示多彩

不同shell變量的表示

  • PS1: 包含默認提示值的環境變量。 它改變了 shell 命令提示符的外觀和環境。
  • PS2:環境變量,其中包含提示用於命令繼續解釋的值。 當您在多行中編寫長命令時,您會看到它。
  • PS3: 環境變量,其中包含 shell 腳本中選擇運算符的提示值。
  • PS4: 環境變量,其中包含在執行程序期間用於顯示腳本行的提示值 bash 調試模式下的腳本。

請注意,在本文中,我們將使用 迴聲 命令在我們的控制台中查看不同提示的值。

1) 改變 bash 提示 PS1

PS1 是我們每次登錄控制台時看到的默認提示。 對於大多數新聞 Linux 系統,默認值有 u@h:w$ 其中顯示 用戶名、主機名、當前工作目錄 用戶權限. 這些只是它可以採用的不同值的示例。 還有一些其他值我們稍後會看到。 我們來看看終端上的PS1提示默認值

# echo $PS1 
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}u@h:w$

包括的部分 debian_chroot 表示如果你是在更改root環境下操作,會修改提示來提醒你。 查看下面以對提示的其餘部分有一個完整的了解:
選項:
a ASCII 鐘形字符(您也可以鍵入 07)
d “Sat Sep 04”格式的日期
e ASCII 轉義字符(您也可以鍵入 33)
h 主機名的第一部分(例如“mybox”)
H 完整的主機名(例如“mybox.mydomain.com”)
j 通過點擊 ^Z 在此 shell 中掛起的進程數
l shell 終端設備的名稱(如“ttyp4”)
n 新隊
r 回車
s shell 可執行文件的名稱(例如“bash”)
t 24 小時制時間(如“23:59:59”)
T 12 小時制的時間(例如“11:59:59”)
@ 時間為 12 小時制,帶 am/pm
u 您的用戶名
v 版本 bash (如2.04)
V Bash 版本,包括補丁級別
w 當前工作目錄(例如“/home/koithara”)
W 當前工作目錄的“basename”(例如“koithara”)
! 當前命令在歷史緩衝區中的位置
# 命令編號(這將在每次提示時計數,只要您鍵入內容)
$ 如果你不是root,插入一個“$”; 如果你是 root,你會得到一個“#”
xxx 插入一個基於三位數字 xxx 的 ASCII 字符(用零替換未使用的數字,例如“07”)
反斜杠
[ This sequence should appear before a sequence of characters that don’t move the cursor (like color escape sequences). This allows bash to calculate word wrapping correctly.
] 此序列應出現在一系列非打印字符之後。

我們將做一些示例,但在操作這些變量的值之前,我們需要保存包含所有變量的文件。 如果我們犯了錯誤或無需註銷並重新登錄,這將有助於更輕鬆地切換回我們的原始提示。

$ cp ~/.bashrc ~/.bashrc-backup

示例 1: 只顯示用戶名和主機名,用分隔符“-”:

user01@server01:~$ export PS1="u - h$ "
user01 - server01$ echo $PS1
u - h$

我們可以立即在控制台上看到更改。 請注意,在等號之後,我們使用雙引號 (“”) 使用 H 值。 如果我們使用另一個註釋,shell 會將等號之後的所有內容都視為值,而我們將不會得到我們參加的結果。

示例 2: 我們在顯示用戶名和主機名時模擬錯誤,因為我們將使用 ^ 代替

user01@server01:~$ export PS1=^u - h$ ^
^u - h$ ^$ echo $PS1 
^u - h$ ^

示例 3: 將字符串傳遞給 PS1 變量

user01@sever01:~$ export PS1=happy-test$
happy-test$

示例 4: 將時間添加到提示中 t 和工作目錄 w

user01 - server01$ export PS1="[t] u@h:w$ "
[21:38:51] user01@server01:~$

示例 5: 將提示分成多行 n 長命令

user01@server01:~$ export PS1="[t]nu@h:w$ "
[21:44:46]
user01@server01:~$

2)改變 bash 提示PS2

當我們在控制台時,我們可能需要在一個命令中關聯多個命令。 它使一行的命令太長,因此可以通過給出“”在每一行的末尾。 默認交互 PS2 多行命令的值提示是“>” 表示可以繼續第二行的命令,依此類推。

$ echo $PS2
>

示例 1: PS2的默認用法

# apt-get update && 
> apt-get -y install mysql-client python-setuptools curl git unzip apache2 php && 
> apt-get upgrade

示例 2: 您將用一個句子替換該值。 注意最後一個引號之前的轉義

# export PS2=”incomplete? continue here-> ”
# apt-get update && 
incomplete? continue here-> apt-get -y install curl git unzip apache2 && 
incomplete? continue here-> apt-get upgrade

3)改變 bash 提示 PS3

PS3 被使用 選擇 裡面的操作符 bash 腳本。 很難在一個簡單的控制台上獲得它的價值。 為了顯示我們正在談論的內容,我們需要編寫一個簡單的 bash 腳本將幫助我們看到價值。 默認的 PS3 值提示是“#?

示例 1: 我們將下面的內容複製到一個名為 ps3-value.sh 的文件中

#!/bin/bash
echo "please select a value to display a month on the list below"
select i in jan feb mar apr exit
do
    case $i in
       jan) echo "January";;
       feb) echo "February";;
       mar) echo "March";;
       exit) exit;;
    esac
done

示例 2: 一個顯示PS3值的腳本測試

$ chmod +x ps3-value.sh
:~$./ps3-value.sh
1) jan
2) feb
3) mar
4) exit
#? 2
February
#?

注意 ”#?”是PS3值

示例 3: 修改默認值為“choice”,執行腳本顯示

$ export PS3="choice: "
$./ps3-value.sh
Select a value to display a month on the below
1) jan
2) feb
3) mar
4) exit
choice: 2
February
choice:

看到那個 選擇 是我們的新價值

4)改變 bash 提示 PS4

PS4 顯示 a 的每一行 bash 在執行行之前處於調試模式時的腳本。 它有助於知道哪條線沒有給出結果出席。 我們可以用 echo 命令顯示 PS4 的值。 但是在一個 bash 腳本,我們可以看到它使用 bash -X 為執行。 默認的 PS4 值提示是“+

示例 1: 創建與ps3-value.sh內容相同的文件ps4-value.sh並修改默認值

$ echo $PS4
+
$ export PS4="[script line->:] "
$ chmod +x ps4-value.sh
$ bash -x ps4-value.sh 
[script line->: ]echo 'Please select a value to display a month on the list below'
Please select a value to display a month on the list below
[script line->: ]select i in jan feb mar apr bye
1) jan
2) feb
3) mar
4) apr
5) bye
#? 3
[script line->: ]case $i in
[script line->: ]echo March
March
#? 1
[script line->: ]case $i in
[script line->: ]echo January
January

使更改永久化

要使 PS1 在重啟時持久化,您必須將帶有變量的導出命令添加到 .bash_profile 文件中。

$cat .bash_profile
export PS1="[d][t][u@h]"

然後加載您的默認 .bash_profile 文件

$ . .bash_profile

結論

現在你知道不同角色的作用了 bash 提示以及如何修改每一個。 在修改之前保存文件很重要,如果出現錯誤,您必須能夠恢復它。