如何調(diào)教你的終端提示符?
之前有讀者在《Linux下如何優(yōu)雅地修正命令?》中問到,如何在終端顯示當(dāng)前的git分支,實(shí)際上這就是自定義終端顯示配置了。
不過在直接介紹如何顯示當(dāng)前分支之前,來看看到底怎么回事。
bashrc配置
每次我們登錄一個shell終端的時候,前面都有一些固定的顯示信息:
- root@ubuntu:#
這些顯示信息其實(shí)可以配置的。
我們打開用戶家目錄下的.bashrc文件,找到類似下面的關(guān)于PS1的內(nèi)容:
- if [ "$color_prompt" = yes ]; then
- PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
- else
- PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
- fi
這里就是用來配置你的終端顯示的了。
有必要對里面的一些信息進(jìn)行解釋。例如[\033[01;32m]中,01為前景色,32為背景色,顏色代碼如下:
- 前景色 背景色
- 30 40 黑色
- 31 41 紅色
- 32 42 綠色
- 33 43 黃色
- 34 44 藍(lán)色
- 35 45 紫紅色
- 36 46 青藍(lán)色
- 37 47 白色
舉個例子:
- $ echo -e "\033[31m red color \033[0m"
- red color
而其他的符號什么意思呢?
- \d :代表日期,
- \H :完整的主機(jī)名稱
- \h :僅取主機(jī)的第一個名字
- \t :顯示時間為24小時格式,如:HH:MM:SS
- \T :顯示時間為12小時格式
- \A :顯示時間為24小時格式:HH:MM
- \u :用戶名
- \v :BASH的版本信息
- \w :完整的工作目錄名稱
- \W :列出最后一個目錄
- \$ :提示字符,如果是root時,提示符為:# ,普通用戶則為:$
所以說白了,就是根據(jù)你自己的需要配置自己終端想要的信息。
這個時候我們再來看前面的其中一條簡單的配置:
- '${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
$debian_chroot這里我們可以忽略,因?yàn)樗且粋€變量的值,我們完全可以自定義。
可以看到這里有:
- \u 用戶名
- \h 主機(jī)名
- \W 最后一個目錄名
- \$ 提示字符
而通過命令獲取的相關(guān)內(nèi)容分別為:
- $ whoami
- root
- $ hostname
- ubuntu
- $ basename `pwd`
- 公眾號編程珠璣
所以我的終端最終顯示的是:
- root@ubuntu:公眾號編程珠璣#
通常來說,默認(rèn)的配置就可以了,經(jīng)常需要改動的可能就是默認(rèn)它顯示了全路徑,這里只需要將
- \w 替換為 \W
即可。
然后執(zhí)行命令:
- source ~/.bashrc
讓配置生效即可。
再來梳理一下過程:
- 根據(jù)需要修改PS1顯示項(xiàng)
- 執(zhí)行source .bashrc使其生效
這里注意,Linux啟動過程中,配置文件加載是有順序的,
某用戶家目錄下的bashrc只影響當(dāng)前用戶,如果想要全系統(tǒng)修改生效,可以修改/etc/bash.bashrc(系統(tǒng)差異,可能不一樣)。
如何顯示當(dāng)前git分支
其實(shí)到這里你應(yīng)該基本上已經(jīng)明白了,無非就是將git當(dāng)前分支的信息配置在PS1中罷了。
如何獲取當(dāng)前git分支
我們都知道:
- $ git branch
- master
- * testBranch
可以查看分支信息,其中前面有*的表示當(dāng)前所在分支,所以我們通過字符處理拿到即可。
或者直接通過命令:
- $ git rev-parse --abbrev-ref HEAD
- testBranch
拿到。
將分支信息配置在PS1中
考慮到有的目錄下可能并不存在git項(xiàng)目,所以需要做是否為空的判斷,也要注意處理標(biāo)準(zhǔn)錯誤。因此將獲取git分支信息的部分寫成一個shell函數(shù):
- git_branch()
- {
- branch=`git rev-parse --abbrev-ref HEAD 2>/dev/null`
- if [ "${branch}" != "" ]
- then
- if [ "${branch}" = "(no branch)" ]
- then
- branch="(`git rev-parse --short HEAD`...)"
- fi
- echo "($branch)"
- fi
- }
將其加入到.bashrc文件結(jié)尾中,然后修改PS1的內(nèi)容:
- PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W$(git_branch)\$ '
- PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W$(git_branch)\[\033[00m\]\$ '
修改完成后保存,執(zhí)行:
- $ source ~/.bashrc
當(dāng)前里面的顏色你可以根據(jù)自己的需要自定義。再來看看之前的效果,是不是覺得沒那么難配置了?
總結(jié)
實(shí)際上就是根據(jù)自己的需要去配置終端顯示罷了,可以自己選擇顏色,變量內(nèi)容等等。