Linux下命令提示符的修改,PS1的個項參數詳解


1. 需要解決的問題

  1.在linux下雖然很方便,但是當登錄多個服務器,或者有時需要去分辨這些問題,這無疑是很大的不方便,假如有一種方法能輕易分辨那就很方便了。

  2.沒錯,就是有這樣的方法,那就是修改PS1環境變量,具體參數及用法實驗,我們接下來看。

2. 對PS1的分析

  2.1 本次操作系統,Ubuntu

  2.3 首先我來看看我現在命令行,顯示如下:

linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$

 

看見了吧,這就是我當前命令提示符,我們來把我當前的提示符(linoxwong@Ubuntu1901-64:~$)拆開看看
在拆解前我們先做一件事情,先執行一個命令,顯示如下:
1 linoxwong@Ubuntu1901-64:~$ echo $PS1
2 \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
3 linoxwong@Ubuntu1901-64:~$ 
我們執行echo $PS1 得到一個結果(\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$),這個結果我們用到的只有后面的“ \u@\h:\w\$
好了,自此我們來拆解 linoxwong@Ubuntu1901-64:~$ 與 \u@\h:\w\$
  linoxwong ----------------------- 當前我的用戶名 對應 \u
  @ 對應的就是 @
  Ubuntu1901-64 -------------------- 當前我的主機名 對應 \h
  : 對應 :
  ~ ------------------------------ 當前的所在的目錄 對應 \w 因為是我當前在家目錄 正好是 ~ 代表的就是家目錄
  \$ ------------------------------ 對應的就是 $ 這里注意一點,普通用戶$ 如果是root用戶的話是#
root@Ubuntu1901-64:~# 
root@Ubuntu1901-64:~# 
root@Ubuntu1901-64:~# 
root@Ubuntu1901-64:~# 
  
3.1 由上的分析,我們知道了 /u /w /h 等 分別代表 ,用戶,當前目錄,主機,當然還有其它的分別含義,列出如下:

  \d :代表日期,格式為weekday month date,例如:"sun Sep 21"

 
        

  \H :完整的主機名稱

 
        

  \h :僅取主機名中的第一個名字

 
        

  \t :顯示時間為24小時格式,如:HH:MM:SS

 
        

  \T :顯示時間為12小時格式

 
        

  \A :顯示時間為24小時格式:HH:MM

 
        

  \u :當前用戶的賬號名稱

 
        

  \v :BASH的版本信息

 
        

  \w :完整的工作目錄名稱

 
        

  \W :利用basename取得工作目錄名稱,只顯示最后一個目錄名

 
         
         
        

  \# :下達的第幾個命令

 
        

  \$ :提示字符,如果是root用戶,提示符為 # ,普通用戶則為 $

 

  \\   反斜杠


  \[   這個序列應該出現在非打印字符序列之前。


  \]   這個序列應該出現在非打印字符序列之后。

  例如:\[這里的東西不會被echo打印\]    \[ 與 \]  之間的內容有些類似注釋的  

3.2 除了以上外,命令提示符可以設置顏色,這是很棒的一點,顏色來區分再好不過
  以 \e[f;bm 是設置顏色的格式 f,是字體顏色, b,所表示是命令行的背景顏色,記得后面的 m 要帶上,以下是顏色表:

    30  40 黑色

    31  41 紅色

    32  42 綠色

    33  43 黃色

    34  44 藍色

    35  45 紫紅色

    36  46 青藍色

    37  47 白色

例如:我要設置字體為藍色,背景為紅色的提示符注意,f,的取值范圍是30~37,b 取值范圍 40~47,所以我們得到了 \e[34;41m,
現在我們在把 剛剛得到的PS1的
\u@\h:\w\$前面加上 \e[34;41m, 最終得到如下:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\e[34;41m\u@\h:\w\$

我們來測試是不是有效果,如果得到的是藍字紅底的那就對了 請看如下演示:
root@Ubuntu1901-64:~$PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\e[34;41m\u@\h:\w\$"
 
        

有圖有真相,藍字紅底,如你所見。但是這樣會有一個問題,是什么呢?接下來看

3.3 成功的設置為藍字紅底之后還有問題,有什么問題呢,你試着在命令提示符后面輸入一些命令,如圖下:


發現問題沒有,當我輸入命令以后,系統會之后所有的輸出都變成了我們剛剛設置的顏色,如此這樣過於花哨跟搶眼,不太好,所以,我們繼續修改PS1的值,
應該怎么改呢? 很簡單 在剛剛的后面我們加點東西。

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\e[34;41m\u@\h:\w\$\e[0m

我們再來測試:
PS1='\[\e]0;PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\e[34;41m\u@\h:\w\$\e[0m'
 
        

以圖為證明,這樣我能清晰一目了然的看到輸出的結果了。

雖然這樣達到了我想要的效果,但是最好的在剛剛對PS1的修改中加上 \[ , \] 把對顏色的設置放入 \[ 與 ]\中這樣才好,比如
\e[34;41m  加上 \[\]  改為  \[\e[34;41m\]
\e[0m   
加上 \[\] 改為 \[\e[0m\]
因為這是相當於注釋了對顏色的設置,不會被輸出,本機並沒有被輸入,但是那只是對本機而言,某些時候會被輸出並且對顏色的設置無效。
所以最后對PS1的修改為:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\e[34;41m\u@\h:\w\$\e[0m\]
畢竟標准才能通用。
當然,你還能對用戶名,主機名,當前目錄做不同顏色的顯示 放一個例子 其他的自行體會
例:用戶名設為藍色 主機名設為白色 目錄設為紅色

root@Ubuntu1901-64 /etc#PS1='\[\e[34;40m\]\u@\[\e[37;40m\]\h \[\e[31;40m\]\w\$\[\e[0m\]'
 
        

\[\e[34;40m\]\u @\[\e[37;40m\]\h [\e[31;40m\]\w \$  \[\e[0m\]
要實現上面類似的效果,以顏色做分割就可以了


4.永久性修改PS1
  4.1 以上的對PS1的修改都是本次登錄才有效,重新登錄之后就沒有效果了,
  所以要永久性修改就去改用戶家目錄下的.bashrc文件吧,要對所用的用戶起作用去改/etc下的配置文件吧
5.
總結
  對PS1的修改還能有很多方式,如高亮,在字體前面加上1就可以的 如 \[\e[1;34;40m\]
  修改了之后方便更好的分區當前所在的服務器,更好的知道輸出地方。


 


 
        
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM