我正在为终端中的.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。
答案 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。
答案 1 :(得分:1)
尝试使用5个条而不是3个\\\\\033[1;35m/
至于为什么,bash将\\\\
转义为\\
然后回显-e,再将其转义为\
。如果启用set -x(跟踪模式),您将看到在bash处理后执行的命令(设置+ x以禁用它)。
答案 2 :(得分:0)
如何简单地使用几行POSIX printf
printf "\e[37m/ _\` |\e[36m \....\n"
而不是搞乱所有讨厌的逃避问题?