Adr*_*n E 10 bash terminal ansi-escape iterm
出于某种原因,我的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
Run Code Online (Sandbox Code Playgroud)
产量
\ E [38; 5;81米
选择环境
[1] - 分期
[2] - 质量保证
\ E [0米
我在Mac OSX上使用iTerm,TERM环境变量设置为xterm-256color.
che*_*ner 10
echo -e在bash3.2.x 的实现中有几个明显的错误,这是与Mac OS X一起提供的.文档声称\E(不\e)代表ESC,但似乎都不起作用.你可以printf改用:
printf "\e[38;5;81mfoo\e[0m\n"
Run Code Online (Sandbox Code Playgroud)
或使用(如您所见)\033代表ESC.
更高版本bash(肯定是4.3,可能更早的4.x版本)修复此问题并允许使用\e或\E使用.
有两种方法:直接引用颜色或分配给变量,以便稍后在脚本中引用它们.
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}"
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.