如何使bashshell显示彩色文本?

如何使bashshell显示彩色文本?,bash,Bash,我看到有人可以在bashshell中使输出彩色显示。执行“ls”时,不仅要突出显示错误或警告,还要突出显示目录 有人能告诉我怎么做吗?非常感谢。这些东西从DOS时代起就存在了。使用ANSI转义序列或代码: 用法示例: 这将以绿色文本打印ABC: ESCAPE=$'\e' echo "${ESCAPE}[0;32mABC${ESCAPE}[0m" 您还可以使用-e选项: echo -e "\e[0;32mABC\e[0m" 或printf: printf "\e[0;32mABC\e[0

我看到有人可以在bashshell中使输出彩色显示。执行“ls”时,不仅要突出显示错误或警告,还要突出显示目录


有人能告诉我怎么做吗?非常感谢。

这些东西从DOS时代起就存在了。使用ANSI转义序列或代码:

用法示例:

这将以绿色文本打印ABC:

ESCAPE=$'\e'
echo "${ESCAPE}[0;32mABC${ESCAPE}[0m"
您还可以使用-e选项:

echo -e "\e[0;32mABC\e[0m"
或printf:

printf "\e[0;32mABC\e[0m\n"
查看我在脚本中主要使用的一些代码。

您可以查看并:-

使用ANSI转义序列设置文本属性,如前景和 背景色

示例:-

echo -e "\e[1;34mThis is a blue text.\e[0m"


ls
的特定情况下:

如果您使用的是linux发行版,几乎所有发行版都附带gnu
ls
,那么您可能已经有了彩色输出。如果没有,请尝试
ls-C
ls--color=auto
。您可能需要设置
$LS_颜色
;请参见
mandircolors
,了解轻松操作的方法


但您可能使用的是Mac OS X,它使用的是不同版本的
ls
。如果您的终端输出颜色,您可能会使用
ls-G
获得彩色
ls
输出,但您可能需要再次设置
$LSCOLORS
。此外,您可能需要
导出CLICOLOR=1
,以使终端显示颜色。有关更多信息,请参阅配套网站。

如果您感兴趣,这里有一点背景资料

正如其他人所指出的,终端对所谓的逃逸序列做出响应。这些是可以发送到终端的字符序列(写入、显示),终端硬件不显示这些字符,而是将它们解释为执行各种操作的命令。这些东西可以是任何东西,从移动光标到闪烁,再到改变前景和背景颜色。这是任何终端程序(无论是vi、emacs、ls还是bash)在需要调用某些终端功能时所做的

问题是有许多不同类型的终端,它们具有不同的功能,并响应不同的转义序列。早期,人们提出了一种机制来处理这个问题。他们提出了termcap,然后是terminfo,这是一种抽象终端功能的方法。因此,您可以执行诸如“移动光标”或“设置前景色”之类的操作,底层库从为不同终端维护的DB中检索正确的转义序列(基于TERM environment variable等的值)

因此,你有著名的诅咒图书馆。它可以让你做这一切。对于bash之类的东西,他们已经将此功能封装在一个您可以调用的命令中,称为tput。如何调用它的问题。因此,最好不要直接使用转义序列。但是,您应该通过tput,这样您就可以独立于正在使用的终端。

查看此链接:
#!/bin/bash
# tputcolors

echo
echo -e "$(tput bold) reg  bld  und   tput-command-colors$(tput sgr0)"

for i in $(seq 1 7); do
  echo " $(tput setaf $i)Text$(tput sgr0) $(tput bold)$(tput setaf $i)Text$(tput sgr0) $(tput sgr 0 1)$(tput setaf $i)Text$(tput sgr0)  \$(tput setaf $i)"
done

echo ' Bold            $(tput bold)'
echo ' Underline       $(tput sgr 0 1)'
echo ' Reset           $(tput sgr0)'
echo