Linux終端命令行提示符的藝術--PS1進階
話不多說,先瞅瞅我的命令行提示符(有點大):
圖中命令行解釋:
┌[陽歷日期/農歷日期 時間]
├[當前目錄下目錄數+當前目錄下文件數][當前絕對目錄]
└[用戶名@主機名-第幾個終端 ╰_╯]
相關配置文件
全局配置文件:/etc/bash.bashrc或者/ect/bashrc
單用戶配置文件:“~”目錄下的.bashrc隱藏文件
代碼
對應於上圖中的代碼如下(添加位置一般將原有的PS1覆蓋為准,即可以在原有的PS1上修改,也可以直接添加到配置文件的最後):
get_ps1()
{
Date=$(date +%F)
Time=$(date -R | cut -c 18-25 |sed 's/,//')
Lunar=$(lunar `date +%Y\ %m\ %d` |grep '^Lunar\ :' |awk '{print $3}' |sed 's/^.....\(.*\)..$/\1/')
dn=$(ls -l | grep ^d | wc -l);fn=$(expr $(ls | wc -l) - ${dn})
Num=$(echo $Lunar|wc -m)
[ "$Num" = "5" ] && space=' '
[ "$Num" = "4" ] && space=' '
PS1="\342\224\214[\[\e[01;32m\]${Date}/${Lunar} ${space}${Time}\[\e[00m\]]\n\
\342\224\234[\[\e[01;34m\]${dn}\[\e[00m\]+${fn}][\[\e[01;34m\]\w\[\e[00m\]]\n\
\342\224\224[${debian_chroot:+($debian_chroot)}\[\e[01;32m\]\u@\h-\l \[\e[00m\]\342\225\260\137\342\225\257]\$"
}
PROMPT_COMMAND=get_ps1
如果你覺的上面的命令行提示符太復雜,你也可以將它縮減。。。
你需要了解的
如果你想設計一個自己喜歡的並且夠炫的命令行提示符,你首先要了解以下一些東西。
1)裡面涉及到了農歷日期,在Ubuntu 12.04 LTS中可以從源中找到lunar軟件包,但在Fedora和CentOS中並沒有,為此我寫了一個陽歷轉農歷的shell腳本,具體可以參見我的Linux shell實現陽歷轉農歷 http://www.2cto.com/os/201307/228131.html。
2)轉義符及顏色。這個我就不再羅嗦了,google一下“Linux 命令行 顏色”會有很多答案的。
3)PROMPT_COMMAND,這個是實時命令行的關鍵,這個變量的內容會在顯示bash提示符前執行,所以上面用到的實時內容需要它。
4)特殊字符顯示不了怎麼辦?你可以將它轉換為字符編碼,可以在http://0xcc.net/jsescape/進行轉義,在Plain text欄輸入你要轉義的字符,在\OOO欄就是你想要的字符編碼。