SHELL彩色的命令列

來源:互聯網
上載者:User
彩色的命令列
 

概述

本文以 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 中設定顏色不僅僅能建立更加漂亮的提示符, 在編寫控制台程式的時候也非常有用。

對於一個要使用彩色的程式員,就必須要使用類似 slangncurses 這樣的的庫,者通常會增加執行檔案的大小。 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.dinit 指令碼成功的執行後, 得到一個漂亮的、清晰易讀的提示,而不是一個簡單的 '.', 可以再一次的使用逸出序列。

這是一段 cron init script 的摘錄:

#!/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 0
case "$1" in
start) echo -n "Starting periodic command scheduler: cron"
start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "/[ /033[1;34;40m[ /033[1;32;40mOk /033[1;34;40m]/033[0m/]"
;;

把這個設定應用到所有的 init指令碼上非常耗費時間, 除非使用逸出序列 /033 —— 因為 Ctrl-v 不是作為一個字元來處理的。  

 

定製命令提示字元

我們可以定製要顯示的bash命令提示字元,包括目前使用者名和主機名稱,目前時間,平均負載和當前工作目錄。要實現該目的,修改$PS1變數,如下所示:

bash> PS1='u@h:w @> '
bash> export PS1
root@medusa:/tmp 03:01 PM>

結果將會在命令列顯示當前登入的使用者名稱、主機名稱、當前工作目錄和目前時間。從使用者指南頁可以獲得bash可以理解的符號列表。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.