『忘了再學』Shell基礎 — 14、環境變數(二)

繁華似錦Fighting發表於2022-05-19

提示:

在Linux系統中,環境變數分為兩種。一種是使用者自定義的環境變數,另一種是系統自帶的環境變數。

而在系統自帶的環境變數中,PATH環境變數、PS1環境變數、LANG語系變數需要進行說明一下。

本篇文章主要說明系統自帶的環境變數中的PS1環境變數。

1、PS1變數的作用

PS1變數:命令提示符設定。也就是[root@localhost ~]# 內容的設定。

PS1是一個很有意思的變數,是用來定義命令列提示符的,可以按照我們自己的需求來定義自己喜歡的提示符。

2、PS1變數的檢視

  • 直接檢視PS1變數,如下:
    [root@localhost ~]# echo $PS1
    [\u@\h \W]\$
    
  • 通過set命令檢視,如下圖:
    image

    SP2變數是定義換行之後的命令提示符的顯示。

2、PS1可以支援的選項

我們先解釋一下系統命令提示符的組成[root@localhost ~]# ,我們之前說過root位置代表當前登陸的使用者,localhost位置代表當前主機名的簡寫主機名,~位置表示當前所在目錄,第四列就是命令提示符。

而通過PS1變數我們得知上面的顯示組成是如下選項:[\u@\h \W]\$

所以下面我們羅列出PS1支援的選項:

  • \d:顯示日期,格式為星期 月 日
  • \H:顯示完整的主機名。如預設主機名localhost.localdomain
  • \h:顯示簡寫主機名。如預設簡寫主機名localhost
  • \t:顯示24小時制時間,格式為HH:MM:SS
  • \T:顯示12小時制時間,格式為HH:MM:SS
  • \A:顯示24小時制時間,格式為HH:MM
  • \@:顯示12小時制時間,格式為HH:MM am/pm
  • \u:顯示當前使用者名稱。
  • \v:顯示Bash的版本資訊。
  • \w:顯示當前所在目錄的完整名稱。
  • \W(大寫):顯示當前所在目錄的最後一個目錄。
  • \#:執行的第幾個命令。
  • \$:提示符。如果是root使用者會顯示提示符為#,如果是普通使用者會顯示提示符為$

注意:

在PS1變數中,如果是可以解釋的符號,如\u\h等,則顯示這個符號的作用。如果是不能解釋的符號,如@或“空格”,則原符號輸出。

總結:

# 預設的提示符顯示
# [使用者名稱@簡寫主機名 所在目錄最後一級] 提示符
[root@localhost ~ ] # echo $PS1
[\u@\h \W]\$

3、PS1環境變數的配置

其實我們在使用Linux系統的時候,還是比較習慣的預設的系統命令提示符的配置,也就是PS1變數的預設配置,一般我們是不做任何修改的,因為我們習慣了,修改了之後你會不舒服。如有需要,則看一下。

設定PS1環境變數,如下:

#修改提示符為
#[使用者名稱@當前時間 當前所在完整目錄] 提示符
[root@localhost ~ ] # PS1='[\u@\t \w]\$ (空格)'
# (空格)是因為習慣,看著舒服,不是必須。

#切換下當前所在目錄
#因為家目錄是看不出來區別的
[root@04:46:40 ~ ] # cd /usr/local/src/
[root@04:47:29 /usr/local/src] #
#提示符按照我們的設計發生了變化

這裡一定要注意,PS1變數的值要用單引號包含,因為需要把PS1變數的選項中的特殊符號轉變成普通的字串(主要是$符號),否則設定不生效。系統預設也是單引號設定的,你照著寫就可以了。

擴充套件:再舉個例子。

#可以同時給SP1設定更多的選項
[root@localhost ~ ] # PS1='[\u@\@ \h \# \W]\$ '
[root@04:53 上午 localhost 31 src] #

#\@:顯示12小時制時間,格式為HH:MM am/pm。
#\#:會顯示執行了多少個命令。

PS1變數可以自由定製,不過說實話,預設的提示符已經使用習慣了,如果換一個還是非常彆扭的,推薦預設的提示符就很好。

4、總結

我們上邊在命令列中直接定義PS1變數的值是臨時生效的,一旦重啟電腦就會消失,如果需要永久生效,需要寫入到對應的配置檔案中的。

對應的配置檔案為/etc/bashrc,該檔案也是一個環境變數的配置檔案。

如下圖:

image

注意看圖中SP1變數的配置,是加雙引號的,需要在\$之前再加上一個\,才能正常顯示\$

相關文章