如何让Bash Shell显示彩色文字?

3

我看到有人可以让bash shell的输出显示为彩色的。不仅可以突出显示错误或警告,还可以在执行“ls”时突出显示目录。

有人能告诉我如何做吗?非常感谢。


1
请查看此链接:https://dev59.com/DHE95IYBdhLWcg3wI6jt - user000001
4个回答

2

2
您可以查看这个这个链接,了解如何使用ANSI转义序列设置文本属性,例如前景色和背景色。

示例:

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

并且

#!/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

1

对于ls的特定情况:

如果你使用的是Linux发行版,几乎所有都带有GNU ls,你可能已经拥有了彩色输出。如果没有,请尝试使用 ls -Cls --color=auto。您可能需要设置 $LS_COLORS;有一种简单的方法可以参考 man dircolors

但是您可能在Mac OS X上,它使用不同版本的ls。如果您的终端输出彩色,您可能可以通过 ls -G 获取彩色 ls 输出,但您可能需要设置 $LSCOLORS。此外,您可能需要执行 export CLICOLOR=1 以便终端显示颜色。更多信息,请参见this answer">附属站点上的内容。


0

以下是一些背景信息,如果您感兴趣的话。

正如其他人所指出的那样,终端响应所谓的转义序列。这些是您可以发送到终端(写入、显示)的字符序列,终端硬件会将它们解释为执行各种操作的命令,而不是显示这些字符。这些操作可能是从移动光标、闪烁到更改前景和背景颜色等任何内容。当任何终端程序需要调用某些终端功能时(无论是vi、emacs、ls还是bash),都要做这些事情。

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

因此,你有著名的curses库。它可以讓你做所有這些事情。對於像bash這樣的東西,他們已經將這個功能封裝在一個叫做tput的命令中,你可以調用它。man page give you the details 會告訴你如何調用它。所以,最好不要直接使用轉義序列,而是通過tput進行,這樣你就可以獨立於你正在使用的終端。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接