Bash打印颜色代码的字面意思,而不是实际的颜色



由于某种原因,我的shell脚本停止了彩色打印菜单,而是实际打印文字颜色代码。我是不是以某种方式逃脱了颜色编码?

脚本

#!/bin/bash 
function showEnvironments {
echo -e "e[38;5;81m"
echo -e "      SELECT ENVIRONMENT       "
echo -e "[1] - QA"
echo -e "[2] - PROD"
echo -e "e[0m"
}
showEnvironments

输出

\e[38;5;81m

选择环境

[1] -暂存

[2] -QA-

\e[0m

我在Mac OSX上使用iTerm,TERM环境变量设置为xterm-256color

bash 3.2.x中实现echo -e有几个明显的错误,这是Mac OS x附带的。文档声称E(而不是e)代表ESC,但两者似乎都不起作用。您可以使用printf代替:

printf "e[38;5;81mfooe[0mn"

或者使用(如您所发现的)33来表示ESC。

bash的后续版本(肯定是4.3,也可能是更早的4.x版本)修复了这个问题,并允许使用eE

有两种方法可以做到这一点:直接引用颜色或分配给变量,以便在脚本中稍后更容易地引用它们。

cNone='33[00m'
cRed='33[01;31m'
cGreen='33[01;32m'
cYellow='33[01;33m'
cPurple='33[01;35m'
cCyan='33[01;36m'
cWhite='33[01;37m'
cBold='33[1m'
cUnderline='33[4m'
echo -e "33[01;31m"
echo -e "hello"
echo -e "33[00m"
echo -e "${cGreen}"
echo -e "hello"
echo -e "${cNone}"

我希望这能有所帮助。

我想明白了。在我的终端中,我用于颜色代码的转义符似乎无法识别。

基于http://misc.flogisoft.com/bash/tip_colors_and_formatting#colors1有效的转义码是:

e
33
x1B

当我将颜色从\e[38;5;81m更改为\033[38;5;81 m时,它开始按预期工作。

感谢大家的建议和帮助!

两个潜在的尝试:

  • 运行stty sane以重置终端设置
  • 检查$TERM环境变量

相关内容

  • 没有找到相关文章

最新更新