這裡敘述了一些命令提示字串的進階用法,讓您可以自訂一些更特別的命令提示字串。
在上一篇命令提示字串的基本教學中,我們介紹了一些最基本的命令提示字串設定方式,以下我們再進一步說明如何利用 tput
來控制文字樣式,另外也蒐集了許多好用的範例,如果不想自己慢慢自訂命令提示字串的人,可以從這裡找一個自己喜歡的來使用。
tput
控制文字樣式tput
指令也可以用來控制命令提示字串,除了顏色之外,他還可以控制文字的樣式,例如粗體與下底線等:
PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"
以下是 tput
控制顏色的用法:
tput setb [1-7]
:設定背景顏色。tput setab [1-7]
:使用 ANSI escape code 設定背景顏色。tput setf [1-7]
:設定前景顏色。tput setaf [1-7]
:使用 ANSI escape code 設定前景顏色。以下這個指令稿可以顯示出所有前景與背景的顏色差異:
#!/bin/bash for i in {1..7}; do echo "$(tput setab $i)setab $i$(tput sgr0)\ $(tput setb $i)setb $i$(tput sgr0)\ $(tput setaf $i)setaf $i$(tput sgr0)\ $(tput setf $i)setf $i$(tput sgr0)" done
結果會像這樣:
用於控制文字樣式的語法:
tput bold
:進入粗體模式。tput dim
:進入低亮度(half-bright)模式。tput smul
:進入下底線模式。tput rmul
:結束下底線模式。tput rev
:開始反相模式。tput smso
:進入 standout 模式。tput rmso
:結束 standout 模式。tput sgr0
:結束所有的模式。這是這幾種文字樣式的簡單示範:
以下我們蒐集許多很有用的、或是很有趣的命令提示字串範例程式碼,您可以從這些範例來修改,創造出屬於自己的命令提示字串。
PS1='\[\e[1;36m\]\d \[\e[1;32m\]\t \[\e[1;33m\]\u@\[\e[1;35m\]\h:\w\$\[\e[0;31m\] '
PS1='\[\e[1;33m\]\u@\h \w ->\n\[\e[1;36m\] \@ \d\$\[\e[m\] '
root
帳號依據是否為 root
帳號來選擇命令提示字串:
if [ $(id -u) -eq 0 ]; then PS1='\[\e[1;36m\][\d \t \u@\h \w]\$\[\e[m\] ' else PS1='\[\e[1;33m\][\d \t \u@\h \w]\$\[\e[m\] ' fi
一般使用者的狀況:
root
管理者的狀況:
root
使用者的命令提示字串設定成比較醒目的顏色,這樣可以讓自己很容易辨識出是否正在使用 root
權限執行指令,降低下錯指令的風險。fortune
與 cowsay
在 .bashrc
中加入下面這行,可以在每次開啟終端機時,顯示一些有趣的內容:
[[ "$PS1" ]] && /usr/games/fortune | /usr/games/cowsay -n
這個命令提示字串可以依照上一個指令的執行結果來顯示不同的樣式:
PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ "
依據指令的執行結果改變顏色:
PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\\[\\033[32m\\]"; else echo "\\[\\033[31m\\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\\W"; else echo "\\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0;`hostname -s`:`pwd`\007"
很實用的多行指令,可以顯示目前目錄的檔案數量與大小:
PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"
PS1='\[\e[1;32m\]\u@\H:\[\e[m\] \[\e[1;37m\]\w\[\e[m\]\n\[\e[1;33m\]hist:\! \[\e[0;33m\] \[\e[1;31m\]jobs:\j \$\[\e[m\] '