2017-09-21 37 views
1

要打印彩色的話,我可以在外殼做到這一點:如何爲特殊的彩色回聲創建函數?

declare -A COLORS 
COLORS["red"]='\033[0;31m' 
COLORS["default"]='\033[0m' 

echo -e "${COLORS["red"]}abc${COLORS["default"]}" # With color 
echo -e "xyz" # No color. 
echo -e "${COLORS["red"]}lmn${COLORS["default"]}" # With color 

但複製粘貼+的線條與顏色是很難當需要顏色的調試消息到處都是維護。

我試圖把它放在一個功能,例如:

function RedPrint() { 
    echo -e "${COLORS["red"]}$1${COLORS["default"]}" >&2 
} 

的好處是RedPrint允許全局變量:

G="hahaha" 
RedPrint "abc $G foo bar" 

RedText "blah blah "${G}" foo foo bar" 

但我敢肯定有一些注意事項我沒有遇到過。功能化RedPrint的行爲與我將如何使用echo -e相同?

(份)的問題是:

  • 是否有操縱外殼顏色更簡單的方法?有替代品嗎?
  • 功能是否與echo保持彩色打印的好方法? RedPrint怎麼寫?

回答

2

據我所知,沒有其他的輸出彩色文本的主要方法。

唯一的其他可能的替代方案是使用tput來生成顏色代碼,因爲tput將在輸出值(更適合跨環境)之前考慮您當前終端的功能。

例如,你會怎麼做:

declare -A COLORS 
COLORS["red"]=$(tput setaf 1) 
COLORS["default"]=$(tput setaf 9) 

其中:

Value | Color 
------------- 
0  | Black 
1  | Red 
2  | Green 
3  | Yellow 
4  | Blue 
5  | Magenta 
6  | Cyan 
7  | White 
8  | Unused 
9  | Default 

至於你的功能,你應該沒有問題,只要你沒事打印整個線相同的顏色和只要你傳遞給它的字符串本身沒有多種顏色。