如何让bash shell显示彩色文字?

时间:2013-09-01 16:51:25

标签: bash

我看到有人可以让bash shell中的输出显示出色彩鲜艳。执行'ls'时,不仅要突出显示错误或警告,还要突出显示目录。

有谁能告诉我如何制作它?非常感谢。

4 个答案:

答案 0 :(得分:2)

您可以查看thisthis: -

  

使用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 :(得分:1)

ls

的特定情况下

如果您使用的是Linux发行版,几乎所有发行版都带有gnu ls,您可能已经有了彩色输出。如果不这样做,请尝试ls -Cls --color=auto。您可能需要设置$LS_COLORS;请参阅man dircolors了解如何轻松完成此操作。

但可能你使用的是Mac OS X,它使用不同版本的ls。如果您的终端输出颜色,您可能会使用ls获得彩色ls -G输出,但您可能需要再次设置$LSCOLORS。此外,您可能需要export CLICOLOR=1才能让终端显示颜色。有关详细信息,请参阅随播广告网站上的this answer

答案 2 :(得分:0)

这些事情自DOS时代开始存在。使用ANSI转义序列或代码:

  

http://wiki.bash-hackers.org/scripting/terminalcodes

     

http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

     

http://ascii-table.com/ansi-escape-sequences.php

使用示例:

这将以绿色文字打印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"

查看我主要在脚本here中使用的一些代码。

答案 3 :(得分:0)

如果你有兴趣的话,这里有一些背景知识。

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

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

因此,您拥有着名的curses库。它可以让你做到这一切。对于像bash这样的东西,他们已经将这个功能封装在你可以调用的命令中,称为tput。如何调用它的man page give you the details。因此,最好不要直接使用转义序列。但是你应该通过tput来使你保持独立于你正在使用的终端。