Bash 按字面打印颜色代码而不是实际颜色
Bash printing color codes literally and not in actual color
出于某种原因,我的 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
SELECT ENVIRONMENT
[1] - Staging
[2] - QA
\e[0m
我在 Mac OSX 上使用 iTerm,TERM
环境变量设置为 xterm-256color
。
两个潜在的尝试:
- 运行
stty sane
重置终端设置
- 检查
$TERM
环境变量
有两种方法可以做到这一点:直接引用颜色或分配给变量以便稍后在脚本中更容易地引用它们。
cNone='3[00m'
cRed='3[01;31m'
cGreen='3[01;32m'
cYellow='3[01;33m'
cPurple='3[01;35m'
cCyan='3[01;36m'
cWhite='3[01;37m'
cBold='3[1m'
cUnderline='3[4m'
echo -e "3[01;31m"
echo -e "hello"
echo -e "3[00m"
echo -e "${cGreen}"
echo -e "hello"
echo -e "${cNone}"
希望对您有所帮助。
我明白了。我的终端似乎无法识别我用于颜色代码的转义字符。
基于 http://misc.flogisoft.com/bash/tip_colors_and_formatting#colors1 有效的转义码是:
\e
3
\x1B
当我将颜色从 \e[38;5;81m 更改为 \033[38;5;81m 时,它开始了按预期工作。
感谢大家的建议和帮助!
在 bash
3.2.x 中 echo -e
的实现有几个明显的错误,这是 Mac OS X 附带的。该文档声称 \E
(而不是 \e
)代表 ESC,但两者似乎都不起作用。您可以使用 printf
代替:
printf "\e[38;5;81mfoo\e[0m\n"
或使用(如您所见)3
表示 ESC。
更高版本的 bash
(肯定是 4.3,也可能是更早的 4.x 版本)修复了这个问题并允许使用 \e
或 \E
。
出于某种原因,我的 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
SELECT ENVIRONMENT
[1] - Staging
[2] - QA
\e[0m
我在 Mac OSX 上使用 iTerm,TERM
环境变量设置为 xterm-256color
。
两个潜在的尝试:
- 运行
stty sane
重置终端设置 - 检查
$TERM
环境变量
有两种方法可以做到这一点:直接引用颜色或分配给变量以便稍后在脚本中更容易地引用它们。
cNone='3[00m'
cRed='3[01;31m'
cGreen='3[01;32m'
cYellow='3[01;33m'
cPurple='3[01;35m'
cCyan='3[01;36m'
cWhite='3[01;37m'
cBold='3[1m'
cUnderline='3[4m'
echo -e "3[01;31m"
echo -e "hello"
echo -e "3[00m"
echo -e "${cGreen}"
echo -e "hello"
echo -e "${cNone}"
希望对您有所帮助。
我明白了。我的终端似乎无法识别我用于颜色代码的转义字符。
基于 http://misc.flogisoft.com/bash/tip_colors_and_formatting#colors1 有效的转义码是:
\e
3
\x1B
当我将颜色从 \e[38;5;81m 更改为 \033[38;5;81m 时,它开始了按预期工作。
感谢大家的建议和帮助!
在 bash
3.2.x 中 echo -e
的实现有几个明显的错误,这是 Mac OS X 附带的。该文档声称 \E
(而不是 \e
)代表 ESC,但两者似乎都不起作用。您可以使用 printf
代替:
printf "\e[38;5;81mfoo\e[0m\n"
或使用(如您所见)3
表示 ESC。
更高版本的 bash
(肯定是 4.3,也可能是更早的 4.x 版本)修复了这个问题并允许使用 \e
或 \E
。