close

dfg sdfsdf fggg fdgdf dfgfg 

Bash shell 彩色定義
概述 Shell 的配置shell 彩色配置出現在 bash 的個人配置文件 ~/.bashrc 或者是全局配置文件 /etc/bashrc 裡面。 可以通過 bashrc 裡面的 PS1 變量來設置提示符的外觀。 例如: PS1="\s-\v\$ "\s 表示 shell 的名稱,-\v 表示版本號。 在提示符的最後面放置了一個 $。PS1="\u@\h \w \$ "表示 用戶@ 當前目錄 $ 轉義序列要是通過彩色化提示符來增加個性化,就要用到轉 義序列。 轉義序列就是一個讓 shell 執行一個特殊步驟的控制指令。 轉義序列通常都是以 ESC 開頭(這也是它的命名原因)。 在 shell 裡表示為 ^[。也可以用 \033 完成相同的工作(ESC 的 ASCII 碼用十進製表示就是 27,  用八進製表示為 33)。要直接在 shell 裡面輸入轉義序列需要先按 ctrl-v:CTRL-v ESC。 使用 shell 的顏色下面用一個提示符的例子來解釋 shell 的顏色。 PS1="\[\033[0;32;40m\u@\h:\w\$ \]"這樣提示符就全部顯示成綠色了。就像這樣: nico@ebrain:~$ \033 聲明了轉義序列的開始,然後是 [ 開始定義顏色。 後面的 0 定義了默認的字體寬度。稍後我會介紹其他的可用字符。 轉義序列字符串要用 \[ 和 \] 括起來, 防止轉義序列的文本顯示在 shell 裡佔用太多的空間。下面要選擇前景色(這裡是 32,代表綠色)。背景色的 40 表示黑色。 要是不想讓提示符後面的文字也變成綠色,需要用 \033[0m 關閉轉義序列, \033[0m 是 shell 的默認顏色。前景色和背景色都有 8 種可用的選擇。可選顏色:紅色、綠色、黃色、藍色、洋紅、青色和白色。 他們對應的顏色代碼是:30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋紅)、36(青色)、37(白色)。用同樣色方法設置背景色,不過要把第一個數字「3」替換成「4」, 例如 40、41、42、43、44、45、46、47。示例:
PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"這給了非常多彩的提示符: nico@ ebrain: ~$使用 export PS1="string" 來測試這些設置;PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] " [ nico@ebrain:~ ] 文本屬性 剛才提到了,在第一個轉義序列後面的「0」是提示符的文本的默認顏色設置。 對於文本屬性來說,有意義的值及對應關係為:0、默認值1、粗體22、非粗體4、下劃線24、非下劃線5、閃爍25、非閃爍7、反顯27、非反顯
通過下面這一段短小的腳本,可以看看色彩組合。
#!/bin/sh############################################################# Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de# Last change: Mon Feb 16 16:24:41 CET 2004############################################################for attr in 0 1 4 5 7 ; do echo "----------------------------------------------------------------" printf "ESC[%s;Foreground;Background - \n" $attr for fore in 30 31 32 33 34 35 36 37; do for back in 40 41 42 43 44 45 46 47; do printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back done printf '\n' done printf '\033[0m'done 另一個程序在 shell 中設置顏色不僅僅能創建更加漂亮的提示符, 在編寫控制台程序的時候也非常有用。對於一個要使用彩色的程序員,就必須要使用類似 slang 或 ncurses 這樣的的庫,者通常會增加執行文件的大小。 Ncurses 有著或多或少的獨立於終端的類型的優勢。 C 語言示例用綠色打印「Hello Word」: #i nclude <stdio.h>int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0;}另外一個有用的轉義序列是 printf("\033[2J"),它和 system(clear) 完成的功能一樣。但是可以不需要頭文件 unistd.h。使用printf("\033[1K") 可以刪除一行。 初始化腳本示例如果想在 /etc/init.d 的 init 腳本成功的執行後, 得到一個漂亮的、清晰易讀的提示,而不是一個簡單的 '.', 可以再一次的使用轉義序列。這是一段 cron init scrīpt 的摘錄: #!/bin/sh# Start/stop the cron daemon.test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo ".";;如果 cron 腳本執行成功就會顯示一個句點。 可以用 [Ok] 給這些信息添加上彩色特徵,通過改變 echo 字符串,例如: #!/bin/sh# Start/stop the cron daemon.test -f /usr/sbin/cron || exit 0case "$1" instart) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cronecho "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]" ;; 把這個設置應用到所有的 init腳本上非常耗費時間, 除非使用轉義序列 \033 —— 因為 Ctrl-v 不是作為一個字符來處理的。 



.msgcontent .wsharing ul li { text-indent: 0; }



分享

Facebook
Plurk
YAHOO!



 

1234567890
arrow
arrow
    全站熱搜

    bxjzpqqsdellx 發表在 痞客邦 留言(0) 人氣()