2016-05-09 122 views
6

出于某种原因,我的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] - QA

\ E [0米

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

+0

你应该编辑你的问题,包括你正在使用的终端模拟器和'TERM'环境变量的内容。 –

+0

TERM = xterm-256color TERM_PROGRAM = iTerm.app 这是你在找什么? –

+0

是的。我编辑了您的问题以包含这些重要信息。我不使用Mac,因此我不知道如何配置iTerm来正确解释ANSI转义序列。 –

回答

4

有在echo -ebash 3.2.x中实施,这是船舶与Mac OS X的文件声称什么\E(不\e)表示ESC几个明显的错误,但它们似乎也没有工作。您可以使用printf代替:

printf "\e[38;5;81mfoo\e[0m\n" 

或使用(如你发现)\033来表示ESC。

更高版本的bash(绝对为4.3,可能早期的4.x版本也是如此)解决此问题并允许使用\e\E

1

两个可能的事情尝试:

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

两种方法可以做到这一点:基准颜色直接或指定变量稍后在脚本中更容易引用它们。

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

我希望这会有所帮助。

1

我想通了。看起来,我用于颜色代码的转义字符在我的终端中无法识别。

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

\e 
\033 
\x1B 

当我改变了我的颜色。\ E [38:5:81米到\ 033 [38:5:81米它开始工作作为预期。

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