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

发布于 2024-11-28 08:03:55 字数 741 浏览 1 评论 0原文

我正在终端中为我的 .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。

I am making text ASCII art for my .profile in terminal, and trying to colorize it. At first I as going to use the cat command and heredoc for printing out my art, but then I couldn't get the colors inside of the heredoc to work. So I went with the dirty fix, I am using echo -e for each line and then coloring it. If there's a better way, please let me know! Right now, I am having this problem.

Full picture:

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

Part that I am coloring:

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

Coloring:

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

Outputs:

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

As you can see, I am trying to insert a new color in between the \/. The \ is treating the \033[1;35m literally. Is there a way to color the change the color between the \/ without altering the image?

Also, I am using Mac OSX Lion.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

墨小沫ゞ 2024-12-05 08:03:55

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

man bash | less -p "\\

为了增加可读性,你可能想尝试Figlet。

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

string'" ( asciiart=

为了增加可读性,你可能想尝试Figlet。

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

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

为了增加可读性,你可能想尝试Figlet。

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

Instead of a heredoc you may use the $'string' feature of Bash which makes it possible to directly use ANSI C escape sequences for colouring output.

man bash | less -p "\\

To increase readability you may want to try figlet.

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

string'" ( asciiart=

To increase readability you may want to try figlet.

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

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

To increase readability you may want to try figlet.

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

残月升风 2024-12-05 08:03:55

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

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

Try with 5 bars instead of 3 \\\\\033[1;35m/

As for why, bash escape \\\\ to \\ then echo -e, escape it again to \. If you enable set -x (trace mode) you will see the command executed after bash processing (set +x to disable it).

巷子口的你 2024-12-05 08:03:55

简单地使用几行 POSIX printf

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

而不是搞乱所有讨厌的转义问题怎么样?

What about simply using a few lines of POSIX printf

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

instead of messing with all the pesky escape problems?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文