2

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

有谁可以告诉我怎么做?非常感谢。

4

4 回答 4

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
于 2013-09-01T16:54:43.873 回答
1

在特定情况下ls

如果您使用 linux 发行版,几乎所有发行版都带有 gnu ls,您可能已经有了彩色输出。如果您不这样做,请尝试ls -Cls --color=auto。您可能需要设置$LS_COLORS;看看man dircolors有一种方法可以轻松做到这一点。

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

于 2013-09-01T17:47:51.507 回答
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 "\e[0;32mABC\e[0m\n"

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

于 2013-09-01T16:54:36.923 回答
0

这里有一点背景,如果你有兴趣。

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

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

这样你就有了著名的 curses 库。它可以让你做这一切。对于 bash 之类的东西,他们已经将此功能封装在一个您可以调用的命令中,称为 tput。手册页为您提供了如何调用它的详细信息。因此,最好不要直接使用转义序列。但是,您应该通过 tput 保持独立于您碰巧正在使用的终端。

于 2013-09-01T18:07:06.947 回答