首頁  >  文章  >  後端開發  >  深入理解Shell輸出顏色與控制

深入理解Shell輸出顏色與控制

高洛峰
高洛峰原創
2017-02-07 17:24:351397瀏覽

前言

大家都知道使用ls指令列出檔案清單時,不同的檔案類型會用不同的顏色顯示。那麼如何實現這樣帶有顏色的文字輸出呢?答案並不複雜,不管是用shell還是C語言。

一、shell下的實作方法

先來講在shell下,如何實作。用echo指令就可以實現,參考以下例子:

echo -e "33[32mHello, world!"

當你在終端裡敲下這條指令後,是不是發現系統用綠色輸出了"Hello,world!",不止如此,連之後的指令提示符號都變成綠色了?不要急,聽我繼續說。 echo指令-e選項的作用是啟動終端機對反斜線轉義符(即)的解釋。引號內33用於引導非常規字元序列,這裡的作用就是引導設定輸出屬性,後邊的[32m就是將前景色設為綠色,字母m表示設定的屬性類別,數字代表屬性值。

設定可以單獨使用,例如:

echo -e "33[0m"

這行指令的作用是恢復屬性為預設值,也就是說0m設定項目用於恢復預設值。現在你的終端是不是又一切正常了?

理解了這些,剩下的就簡單了。用這種指令,除了設定文字前景色,還可以設定很多屬性。

下邊列出其他的設定項:

33[0m 关闭所有属性
33[1m 设置高亮度
33[4m 下划线
33[5m 闪烁
33[7m 反显
33[8m 消隐
33[30m 至 33[37m 设置前景色
33[40m 至 33[47m 设置背景色
33[nA 光标上移n行
33[nB 光标下移n行
33[nC 光标右移n行
33[nD 光标左移n行
33[y;xH设置光标位置
33[2J 清屏
33[K 清除从光标到行尾的内容
33[s 保存光标位置
33[u 恢复光标位置
33[?25l 隐藏光标
33[?25h 显示光标

   

各數字所代表的顏色如下:

字背景色彩:深紅

     42:綠色

     43:黃

    46:深綠色

     47:白色

字顏色:30----- ------39


     30:黑色


     31:紅 


     32:綠4:藍色

     35:紫色


     36:深綠


     37:白色

另外,同類的多種設定項目可以組合在一起,中間用分號(;)隔開。


如下:

echo -e "33[20;1H33[1;4;32mHello,world33[0m"


這行命令首先33[20;1H將遊標移到終端第20行第1列,之後的33[1;4;32m將文字屬性設定為高亮、帶下劃線且顏色為綠色,然後輸出Hello,world;最後33[0m將終端屬性恢復為預設值,這樣就不會看到連命令完成後的命令提示字元也變了樣兒了。


透過以上各種指令的組合就可以實現對終端輸出地複雜控制。

二、如何在C程式設計中實現?

了解以上在Shell中的實作方法,關於在C中如何實作就很簡單了。可以說只需要用printf函數代替上邊的echo -e就OK了參見下例:

int color = 32;
 
printf("33[20;1H33[1;4;%dmHello, world.33[0m", color);

這個例子類似上邊shell中最後那個例子,只是這裡顏色值透過變數color來指定(當然,也可以直接指定)。

三、聯想

看到這裡你可能會想,是不是在其他程式語言裡也可以用類似的方法實現對終端輸出的控制呢?答案是肯定的!例如在python中,可以如下輸出:

color=32
 
print “33[20;1H33[1;4;%dHello, world.33[0m"%color

這個例子的效果跟上邊C的例子是相同的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或工作能帶來一定的幫助,如果有疑問大家可以留言交流。

更多深入理解Shell輸出顏色與控制相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn