如何使用 bash 编写彩色文本?
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
greprc=$?
if [[ $greprc -eq 0 ]] ; then
echo -e "${GREEN} converged${NC}" >>log
else
echo -e "${RED} not converged${NC}" >>log
fi
如果仅提示终端,则将文本着色。但是,当我将其写入文件(纯文本)时,它不会对log
文件中的文本进行着色。如何在日志中写入彩色文本?
答案1
cat
这是彩色文件的复制粘贴输出:
[36m
hello36
[35m
hello35
[37m
hello end
以上是为了说明ESC的特殊含义——难以显示,难以输入。在 stackexchange 的编辑窗口中,我看到一个小图标,如 [ESC]。
改为cat -A colorhello > col.txt
:
^[[36m $
hello36$
^[[35m $
hello35$
^[[37m $
hello end$
$
$
(显然,最后有两个空行)(我在另一个 Firefox 选项卡中打开的 col.txt 进行复制)
在 vim 中,转义符将深蓝色显示为“^[”。要插入一个:ctrl-v [ESC]。
在vi中,ESC只是^[
,当我尝试将光标放在“^”上时,我的屏幕闪烁一次。
当然,正如答案中指出的那样,这是一种基本的“富文本”格式。这些转义符和控制序列就在那里,可能比灰色文本更烦人。
(我注意到当文件提示符和光标着色时,文件中用于更改光标的 ANSI 控制序列 (ESC [?1;2;3c)vimrc
就会生效)cat
当然,您必须cat
看到颜色 - 它们是由终端解释的。在编辑器中它们没有任何意义。而且我认为控制序列的语法突出显示不会...投入大量时间。
添加:您不应该把它反过来:插入一些短的魔术字符串而不是 ESC 序列,以便您可以轻松地按行突出显示它。有点像 dmesg 看起来带有括号内的时间戳
[info] Yor first logline...in normal color
[info] Another normal line
[warn] This could appear yellow in your editor
[error] This sticks out red and sticks also out b/w
[info] And so on
就像这样,如果你愿意,你可以看到颜色,以及它们的含义(“哦,我认为这条消息不重要,因为它是如此鲜艳的红色调”:-)当你刚抓到它的时候,它看起来仍然很漂亮。
(一旦你关闭所有那些过度的语法文件,vim 中的语法突出显示就很棒了!)