2011-08-09 15 views
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。

+1

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

+0

工作。 '\\'为斜杠? '\\'换另一个斜线? '\ 033'为逃生。为什么我需要2个斜杠?此外,将其作为答案发布:) – Strawberry

+0

请更改您的问题的标题..这个标题只是比“PLease回答我的问题”更好一点。 – TMS

回答

1

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

至于为什么,庆典逃避\\\\\\然后回显-e,再次逃脱它\。如果启用set -x(跟踪模式),您将看到bash处理后执行的命令(set + x将其禁用)。

2

而不是heredoc您可以使用Bash的$'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

0

什么简单地使用

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

,而不是所有的麻烦逃避问题搞乱的POSIX printf的几行?