【问题标题】:How can I add color between \/ in terminal?如何在终端中的 \/ 之间添加颜色?
【发布时间】:2011-08-09 02:11:30
【问题描述】:

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

【问题讨论】:

  • 尝试使用 5 条而不是 3 条 \\\\\033[1;35m/
  • 工作。 \` for a slash? \` 是另一个斜线吗? \033 逃跑。为什么我需要 2 个斜杠呢?另外,将其发布为答案:)
  • 请更改您的问题的标题。这个标题比“请回答我的问题”好一点。

标签: bash ascii ascii-art


【解决方案1】:

您可以使用 Bash 的 $'string' 功能代替 heredoc,这使得可以直接使用 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        • 2010-11-09
        • 2013-12-21
        • 2014-07-04
        相关资源
        最近更新 更多