當你在 Linux 環境下開啟一個 Shell 終端時,會看到命令列中出現了類似下面的一個 Bash 提示符:
1 |
[user@$host ~]$ |
你知道命令列提示符其實是可以自己設定新增許多非常有用的資訊的嗎?在這篇文章中我就會教你如何自定義自己的 Bash 命令列提示符,想看的話就接著看吧~
如何設定 Bash 提示符
Bash 提示符是通過環境變數 PS1
(提示符字串 1Prompt String 1) 來設定的,它用於互動式 shell 提示符。當然如果你需要更多的輸入才能完成一個 Bash 命令時,PS2
環境變數就是用來設定多行提示符的:
1 2 3 4 5 6 |
[dneary@dhcp-41-137 ~]$ export PS1="[Linux Rulez]$ " [Linux Rulez] export PS2="... " [Linux Rulez] if true; then ... echo "Success!" ... fi Success! |
在哪裡設定 PS1 的值?
PS1
就是一個普通的環境變數,系統預設值設定在 /etc/bashrc
中,在我的系統中,預設提示符通過以下命令來設定的:
1 |
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ " |
它判斷 PS1
是否是系統的預設值 \s-\v$
,如果是的話則將值設定為 [\u@\h \W]\$
。(LCTT 譯註:注意命令中用 \
做了轉義。)
但如果你想要自定義提示符,不應該修改 /etc/bashrc
,而是應該在你的主目錄下將自定義命令加到 .bashrc
檔案中。
上面提到的 \u
、\h
、\W
、\s
和 \v
是什麼意思?
在 man bash
中的 PROMPTING 章節中,你能夠找到所有 PS1
和 PS2
相關的特殊字元的描述,以下是一些比較常用的:
\u
:使用者名稱\h
:短主機名\W
:當前你所在的目錄的名稱(basename),~
表示你的主目錄\s
:Shell 名字(bash 或者 sh,取決於你的 Shell 的名字是什麼)\v
:Shell 的版本號
還有哪些特殊的字串可以用在提示符當中
除了上面這些,還有很多有用的字串可以用在提示符當中:
\d
:將日期擴充套件成 “Tue Jun 27” 這種格式\D{fmt}
:允許自定義日期格式——可通過man strftime
來獲得更多資訊\D{%c}
:獲得本地化的日期和時間\n
:換行(參考下面的多行提示符)\w
:顯示當前工作目錄的完整路徑\H
:當前工作機器的完整主機名
除了以上這些,你還可以在 Bash 的 man 頁面的 PROMPTING 部分找到更多的特殊字元和它的用處。
多行提示符
如果你的提示符過長(比如說你想包括 \H
、\w
或完整的日期時間時 ),想將提示符切成兩行,可以使用 \n
將提示符切斷成兩行顯示,比如下面的多行的例子會在第一行顯示日期、時間和當前工作目錄,第二行顯示使用者名稱和主機名:
1 |
PS1="\D{%c} \w\n[\u@\H]$ " |
還能再好玩點嗎?
人們偶爾也想將提示符變成彩色的。雖然我覺得彩色提示符讓人分心、易怒,但是也許你很喜歡。如果我們想將日期變成紅色的,目錄變成青藍色,使用者名稱搞一個黃色背景,你可以這樣做:
你可以在 Bash prompt HOWTO 這裡找到更多的顏色程式碼,甚至可以讓字元反相和閃爍!我不知道為什麼地球人會有這種想法,但是你可以這麼幹!
所以你最喜歡的自定義提示符是什麼樣子的呢?有沒有讓你抓狂的自定義提示符呢?請在評論裡告訴我吧~
作者簡介:
Dave Neary – Dave Neary 是紅帽開源和標準化團隊成員,幫助開源專案對紅帽的成功至關重要。自從在 1999 年為 GIMP 提交了第一個補丁以來,他一直帶著各種不同的帽子,在開源的世界徜徉。