Bash打印颜色代码字面上而不是实际颜色

时间:2016-05-09 11:59:11

标签: bash terminal iterm ansi-escape

出于某种原因,我的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;81米

     

选择环境

     

[1] - 分期

     

[2] - 质量保证

     

\ E [0米

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

4 个答案:

答案 0 :(得分:8)

subprocess.Popen 3.2.x中echo -e的实施存在一些明显的错误,这是Mac OS X附带的内容。文档声称bash(不是{{1}代表ESC,但似乎都不起作用。您可以改为使用\E

\e

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

printf "\e[38;5;81mfoo\e[0m\n" 的更高版本(肯定是4.3,可能更早的4.x版本)修复此问题并允许使用\033bash

答案 1 :(得分:5)

两种方法:直接引用颜色或分配给变量以便稍后在脚本中引用它们。

cNone='\033[00m'
cRed='\033[01;31m'
cGreen='\033[01;32m'
cYellow='\033[01;33m'
cPurple='\033[01;35m'
cCyan='\033[01;36m'
cWhite='\033[01;37m'
cBold='\033[1m'
cUnderline='\033[4m'

echo -e "\033[01;31m"
echo -e "hello"
echo -e "\033[00m"

echo -e "${cGreen}"
echo -e "hello"
echo -e "${cNone}"

我希望这会有所帮助。

答案 2 :(得分:2)

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

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

\e
\033
\x1B

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

感谢其他人的建议和帮助!

答案 3 :(得分:1)

有两种可能的尝试:

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