我知道 Ruby 和 Javascript 等语言的库可以通过使用“红色”等颜色名称来更轻松地对终端脚本进行着色。
但是 Bash、Ksh 或其他语言中的 shell 脚本是否有类似的东西呢?
答案1
您可以在 bash 脚本中定义颜色,如下所示:
red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'
然后使用它们以您需要的颜色进行打印:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
答案2
您可以使用tput
或printf
使用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"
答案3
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
答案4
更好的是使用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
按照中建议的方式设置变量这个解决方案。