1

我正在为我.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。

4

3 回答 3

2

heredoc您可以使用 Bash 的特性代替 a $'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

于 2011-08-09T11:37:38.320 回答
1

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

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

于 2011-08-09T11:48:19.497 回答
0

简单地使用几行 POSIX printf 怎么样

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

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

于 2011-08-09T12:11:05.093 回答