出于某种原因,我的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
。
答案 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版本)修复此问题并允许使用\033
或bash
。
答案 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
环境变量