眾所周知,bash(the Bourne-Again Shell)是目前絕大多數 Linux 發行版使用的預設 shell。本文將會介紹如何通過新增顏色和樣式來自定義 bash 命令提示符的顯示。儘管很多外掛或工具都可以很輕易地滿足這一需求,但我們也可以不使用外掛和工具,自己手動自定義一些基本的顯示方式,例如新增或者修改某些元素、更改前景色、更改背景色等等。
在 Linux 中自定義 bash 命令提示符
在 bash 中,我們可以通過更改 $PS1
環境變數的值來自定義 bash 命令提示符。
一般情況下,bash 命令提示符會是以下這樣的形式:
在上圖這種預設顯示形式當中,“sk” 是我的使用者名稱,而 “ubuntuserver” 是我的主機名。
只要插入一些以反斜槓開頭的特殊轉義字串,就可以按照你的喜好修改命令提示符了。下面我來舉幾個例子。
在開始之前,我強烈建議你預先備份 ~/.bashrc
檔案。
1 |
$ cp ~/.bashrc ~/.bashrc.bak |
更改 bash 命令提示符中的 username@hostname 部分
如上所示,bash 命令提示符一般都帶有 “username@hostname” 部分,這個部分是可以修改的。
只需要編輯 ~/.bashrc
檔案:
1 |
$ vi ~/.bashrc |
在檔案的最後新增一行:
1 |
PS1="ostechnix> " |
將上面的 “ostechnix” 替換為任意一個你想使用的單詞,然後按 ESC
並輸入 :wq
儲存、退出檔案。
執行以下命令使剛才的修改生效:
1 |
$ source ~/.bashrc |
你就可以看見 bash 命令提示符中出現剛才新增的 “ostechnix” 了。
再來看看另一個例子,比如將 “username@hostname” 替換為 “Hello@welcome>”。
同樣是像剛才那樣修改 ~/.bashrc
檔案。
1 |
export PS1="Hello@welcome> " |
然後執行 source ~/.bashrc
讓修改結果立即生效。
以下是我在 Ubuntu 18.04 LTS 上修改後的效果。
僅顯示使用者名稱
如果需要僅顯示使用者名稱,只需要在 ~/.bashrc
檔案中加入以下這一行。
1 |
export PS1="\u " |
這裡的 \u
就是一個轉義字串。
下面提供了一些可以新增到 $PS1
環境變數中的用以改變 bash 命令提示符樣式的轉義字串。每次修改之後,都需要執行 source ~/.bashrc
命令才能立即生效。
顯示使用者名稱和主機名
1 |
export PS1="\u\h " |
命令提示符會這樣顯示:
1 |
skubuntuserver |
顯示使用者名稱和完全限定域名
1 |
export PS1="\u\H " |
在使用者名稱和主機名之間顯示其它字元
如果你還需要在使用者名稱和主機名之間顯示其它字元(例如 @
),可以使用以下格式:
1 |
export PS1="\u@\h " |
命令提示符會這樣顯示:
1 |
sk@ubuntuserver |
顯示使用者名稱、主機名,並在末尾新增 $ 符號
1 |
export PS1="\u@\h\\$ " |
綜合以上兩種顯示方式
1 |
export PS1="\u@\h> " |
命令提示符最終會這樣顯示:
1 |
sk@ubuntuserver> |
相似地,還可以新增其它特殊字元,例如冒號、分號、星號、下劃線、空格等等。
顯示使用者名稱、主機名、shell 名稱
1 |
export PS1="\u@\h>\s " |
顯示使用者名稱、主機名、shell 名稱以及 shell 版本
1 |
export PS1="\u@\h>\s\v " |
bash 命令提示符顯示樣式:
顯示使用者名稱、主機名、當前目錄
1 |
export PS1="\u@\h\w " |
如果當前目錄是 $HOME
,會以一個波浪線(~
)顯示。
在 bash 命令提示符中顯示日期
除了使用者名稱和主機名,如果還想在 bash 命令提示符中顯示日期,可以在 ~/.bashrc
檔案中新增以下內容:
1 |
export PS1="\u@\h>\d " |
在 bash 命令提示符中顯示日期及 12 小時制時間
1 |
export PS1="\u@\h>\d\@ " |
顯示日期及 hh:mm:ss 格式時間
1 |
export PS1="\u@\h>\d\T " |
顯示日期及 24 小時制時間
1 |
export PS1="\u@\h>\d\A " |
顯示日期及 24 小時制 hh:mm:ss 格式時間
1 |
export PS1="\u@\h>\d\t " |
以上是一些常見的可以改變 bash 命令提示符的轉義字串。除此以外的其它轉義字串,可以在 bash 的 man 手冊 PROMPTING 章節中查閱。
你也可以隨時執行以下命令檢視當前的命令提示符樣式。
1 |
$ echo $PS1 |
在 bash 命令提示符中去掉 username@hostname 部分
如果我不想做任何調整,直接把 username@hostname 部分整個去掉可以嗎?答案是肯定的。
如果你是一個技術方面的博主,你有可能會需要在網站或者部落格中上傳自己的 Linux 終端截圖。或許你的使用者名稱和主機名太拉風、太另類,不想讓別人看到,在這種情況下,你就需要隱藏命令提示符中的 “username@hostname” 部分。
如果你不想暴露自己的使用者名稱和主機名,只需要按照以下步驟操作。
編輯 ~/.bashrc
檔案:
1 |
$ vi ~/.bashrc |
在檔案末尾新增這一行:
1 |
PS1="\W> " |
輸入 :wq
儲存並關閉檔案。
執行以下命令讓修改立即生效。
1 |
$ source ~/.bashrc |
現在看一下你的終端,“username@hostname” 部分已經消失了,只保留了一個 ~>
標記。
如果你想要儘可能簡單的操作,又不想弄亂你的 ~/.bashrc
檔案,最好的辦法就是在系統中建立另一個使用者(例如 “user@example”、“admin@demo”)。用帶有這樣的命令提示符的使用者去截圖或者錄屏,就不需要顧慮自己的使用者名稱或主機名被別人看見了。
警告:在某些情況下,這種做法並不推薦。例如像 zsh 這種 shell 會繼承當前 shell 的設定,這個時候可能會出現一些意想不到的問題。這個技巧只用於隱藏命令提示符中的 “username@hostname” 部分,僅此而已,如果把這個技巧挪作他用,也可能會出現異常。
為 bash 命令提示符著色
目前我們也只是變更了 bash 命令提示符中的內容,下面介紹一下如何對命令提示符進行著色。
通過向 ~/.bashrc
檔案寫入一些配置,可以修改 bash 命令提示符的前景色(也就是文字的顏色)和背景色。
例如,下面這一行配置可以令某些文字的顏色變成紅色:
1 |
export PS1="\u@ \[\e[31m\] \h\[\e[m\] " |
新增配置後,執行 source ~/.bashrc
立即生效。
你的 bash 命令提示符就會變成這樣:
類似地,可以用這樣的配置來改變背景色:
1 |
export PS1="\u@ \[\e[31;46m\] \h\[\e[m\] " |
新增 emoji
大家都喜歡 emoji。還可以按照以下配置把 emoji 插入到命令提示符中。
1 |
PS1="\W ♤ >" |
需要注意的是,emoji 的顯示取決於使用的字型,因此某些終端可能會無法正常顯示 emoji,取而代之的是一些亂碼或者單色表情符號。
自定義 bash 命令提示符有點難,有更簡單的方法嗎?
如果你是一個新手,編輯 $PS1
環境變數的過程可能會有些困難,因為命令提示符中的大量轉義字串可能會讓你有點暈頭轉向。但不要擔心,有一個線上的 bash $PS1
生成器可以幫助你輕鬆生成各種 $PS1
環境變數值。
就是這個網站:
只需要直接選擇你想要的 bash 命令提示符樣式,新增顏色、設計排序,然後就完成了。你可以預覽輸出,並將配置程式碼複製貼上到 ~/.bashrc
檔案中。就這麼簡單。順便一提,本文中大部分的示例都是通過這個網站製作的。
我把我的 ~/.bashrc 檔案弄亂了,該如何恢復?
正如我在上面提到的,強烈建議在更改 ~/.bashrc
檔案前做好備份(在更改其它重要的配置檔案之前也一定要記得備份)。這樣一旦出現任何問題,你都可以很方便地恢復到更改之前的配置狀態。當然,如果你忘記了備份,還可以按照下面這篇文章中介紹的方法恢復為預設配置。
這篇文章是基於 ubuntu 的,但也適用於其它的 Linux 發行版。不過事先宣告,這篇文章的方法會將 ~/.bashrc
檔案恢復到系統最初時的狀態,你對這個檔案做過的任何修改都將丟失。
感謝閱讀!