2017-09-21 36 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 

至于你的功能,你应该没有问题,只要你没事打印整个线相同的颜色和只要你传递给它的字符串本身没有多种颜色。