如何在\ /终端之间添加颜色?

时间:2011-08-09 02:11:30

标签: bash ascii ascii-art

我正在为终端中的.profile制作文本ASCII艺术,并尝试着色。起初我打算使用cat命令和heredoc来打印我的艺术作品,但后来我无法让heredoc里面的颜色发挥作用。所以我选择了肮脏的修复,我为每一行使用echo -e然后着色它。如果有更好的方法,请告诉我!现在,我遇到了这个问题。

全貌:

    _            _
 __| |_ __  __ _| |__
/ _` | '  \/ _` | / /
\__,_|_|_|_\__,_|_\_\

我着色的部分:

/ _` | '  \/ _` | / /

着色:

echo -e "\033[37m/ _\` |\033[36m '  \\\033[1;35m/ _\` | / /";

输出:

/ _` | '  \033[1;35m/ _` | / /

如您所见,我正在尝试在\/之间插入新颜色。 \字面上正在处理\033[1;35m。有没有办法在\/之间改变颜色而不改变图像?

另外,我使用的是Mac OSX Lion。

3 个答案:

答案 0 :(得分:2)

您可以使用Bash的heredoc功能代替$'string',这样就可以直接使用ANSI C转义序列来着色输出。

man bash | less -p "\\$'string'"

(
asciiart=$'
    _            _
 __| |_ __  __ _| |__
\033[37m/ _` |\033[36m \'  \\\033[1;35m/ _` | / /\033[m
\\__,_|_|_|_\\__,_|_\\_\\
'
echo "$asciiart" | sed '1d;$d'
)

为了提高可读性,您可能需要尝试使用figlet。

http://rudix.org/packages-def.html#figlet

答案 1 :(得分:1)

尝试使用5个条而不是3个\\\\\033[1;35m/

至于为什么,bash将\\\\转义为\\然后回显-e,再将其转义为\。如果启用set -x(跟踪模式),您将看到在bash处理后执行的命令(设置+ x以禁用它)。

答案 2 :(得分:0)

如何简单地使用几行POSIX printf

printf "\e[37m/ _\` |\e[36m \....\n"

而不是搞乱所有讨厌的逃避问题?