shell 脚本中的“友好”终端颜色名称?

shell 脚本中的“友好”终端颜色名称?

我知道 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

您可以使用tputprintf

使用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

在zsh中:

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}" ;

这是一个教程在终端中打印彩色时钟。

另请注意,将tputSTDOUT 重定向到文件时仍可能打印转义字符:

$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"

为了防止这种情况发生,请设置您的tput按照中建议的方式设置变量这个解决方案

相关内容