Answers:
您可以使用tput
ORprintf
使用tput
,
只需如下创建函数并使用它们
shw_grey () {
echo $(tput bold)$(tput setaf 0) $@ $(tput sgr 0)
}
shw_norm () {
echo $(tput bold)$(tput setaf 9) $@ $(tput sgr 0)
}
shw_info () {
echo $(tput bold)$(tput setaf 4) $@ $(tput sgr 0)
}
shw_warn () {
echo $(tput bold)$(tput setaf 2) $@ $(tput sgr 0)
}
shw_err () {
echo $(tput bold)$(tput setaf 1) $@ $(tput sgr 0)
}
您可以使用 shw_err "WARNING:: Error bla bla"
使用 printf
print red; echo -e "\e[31mfoo\e[m"
echo -e
不是printf
,并且还需要警告它与tput
选项不同,因为它不会自动适应西装$TERM
。
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
print -P '%F{red}blah%f'
对于简单的常用用法(仅用单一颜色的全行文本加上结尾的换行符),我将jasonwryan的代码修改如下:
#!/bin/bash
red='\e[1;31m%s\e[0m\n'
green='\e[1;32m%s\e[0m\n'
yellow='\e[1;33m%s\e[0m\n'
blue='\e[1;34m%s\e[0m\n'
magenta='\e[1;35m%s\e[0m\n'
cyan='\e[1;36m%s\e[0m\n'
printf "$green" "This is a test in green"
printf "$red" "This is a test in red"
printf "$yellow" "This is a test in yellow"
printf "$blue" "This is a test in blue"
printf "$magenta" "This is a test in magenta"
printf "$cyan" "This is a test in cyan"
awk -v red="$(printf '\e[1;31m%%s\e[0m\\n')" -v green="$(printf '\e[1;32m%%s\e[0m\\n')" 'BEGIN { printf red, "This text is in red"; printf green, "This text is in green" }'
更好的方法是tput
根据输出/终端功能使用转义字符。(如果终端无法解释\e[*
颜色代码,那么它将被“污染”,从而使输出难以阅读。(或者有时,如果您grep
输出这样的结果,则会\e[*
在结果中看到这些内容)
请参阅本教程tput
。
你可以写 :
blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;
另外,请注意,tput
在将STDOUT重定向到文件时,可能仍会打印转义符:
$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"
为了防止这种情况发生,请tput
像在此解决方案中建议的那样设置变量。