如何在Linux終端裏用Shell和C輸出帶顏色的文字(轉)

原文:http://blog.csdn.net/acmee/article/details/6613060        咱們知道,使用ls命令列出文件列表時,不一樣的文件類型會用不一樣的顏色顯示。那麼如何實現這樣帶顏色的文本輸出呢?答案並不複雜,無論是用shell仍是C語言。 1、shell下的實現方法        先來說在shell下,如何實現。用echo命令就能夠實現,參看如下例子:        echo  -e  "\033[32mHello, world!"        當你在終端裏敲下這條命令後,是否是發現系統用綠色輸出了"Hello,world!",不止如此,連以後的命令提示符都變成了綠色?不要着急,聽我繼續說。echo命令-e選項的做用是激活終端對反斜線轉義符(即\)的解釋。引號內\033用於引導很是規字符序列,在這裏的做用就是引導設置輸出屬性,後邊的[32m就是將前景色設置爲綠色,字母m表示設置的屬性類別,數字表明屬性值。設置能夠單獨使用,例如:        echo -e  "\033[0m"        這行命令的做用是恢復屬性爲默認值,也就是說0m設置項用於恢復默認值。如今你的終端是否是又一切正常了?        理解了這些,剩下的就簡單了。用這種命令,除了設置文本前景色,還能夠設置不少屬性。下邊列出其餘的設置項:       --------------------------------------------------------------------------       \033[0m 關閉全部屬性       \033[1m 設置高亮度       \033[4m 下劃線       \033[5m 閃爍       \033[7m 反顯       \033[8m 消隱       \033[30m 至 \33[37m 設置前景色       \033[40m 至 \33[47m 設置背景色       \033[nA 光標上移n行        \033[nB 光標下移n行       \033[nC 光標右移n行       \033[nD 光標左移n行       \033[y;xH設置光標位置       \033[2J 清屏       \033[K 清除從光標到行尾的內容       \033[s 保存光標位置        \033[u 恢復光標位置       \033[?25l 隱藏光標       \033[?25h 顯示光標       --------------------------------------------------------------------------       各數字所表明的顏色以下:       字背景顏色範圍:40----49       40:黑       41:深紅       42:綠       43:黃色       44:藍色       45:紫色       46:深綠       47:白色       字顏色:30-----------39       30:黑       31:紅       32:綠       33:黃       34:藍色       35:紫色       36:深綠        37:白色       另外,同類的多種設置項能夠組合在一塊兒,中間用分號(;)隔開。以下:       echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"       這行命令首先\033[20;1H將光標移動到終端第20行第1列,以後的\033[1;4;32m將文本屬性設置爲高亮、帶下劃線且顏色爲綠色,而後輸出Hello,world;最後\033[0m將終端屬性恢復爲默認值,這樣就不會看到連命令完成後的命令提示符也變了樣兒了。       經過以上各類命令的組合就能夠實現對終端輸出地複雜控制。 2、如何在C編程中實現?       理解了以上在Shell中的實現方法,關於在C中如何實現就很簡單了。能夠說只須要用printf函數代替上邊的echo -e就OK了。參見下例:       int color = 32;       printf("\033[20;1H\033[1;4;%dmHello, world.\033[0m", color);       這個例子相似上邊shell中最後那個例子,只是這裏顏色值經過變量color來指定(固然,也能夠直接指定)。 3、聯想       看到這裏你可能會想,是否是在其餘編程語言裏也能夠用相似的方法實現對終端輸出的控制呢?答案是確定的!好比在python中,能夠以下輸出:       color=32       print 「\033[20;1H\033[1;4;%dHello, world.\033[0m"%color       這個例子的效果跟上邊C的例子是相同的

相關文章
相關標籤/搜索