我看到有人可以使 bash shell 中的输出以彩色显示。不仅突出显示错误或警告,还突出显示执行 'ls' 时的目录。
有谁可以告诉我怎么做?非常感谢。
使用 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
在特定情况下ls
:
如果您使用 linux 发行版,几乎所有发行版都带有 gnu ls
,您可能已经有了彩色输出。如果您不这样做,请尝试ls -C
或ls --color=auto
。您可能需要设置$LS_COLORS
;看看man dircolors
有一种方法可以轻松做到这一点。
但可能您使用的是 Mac OS X,它使用不同版本的ls
. 如果您的终端输出颜色,您可能可以使用 获得彩色ls
输出ls -G
,但您可能需要再次设置$LSCOLORS
. 此外,您可能需要export CLICOLOR=1
让终端显示颜色。有关更多信息,请参阅配套网站上的此答案。
这些东西在 DOS 时代就已经存在。使用 ANSI 转义序列或代码:
http://wiki.bash-hackers.org/scripting/terminalcodes
示例用法:
这将以绿色文本打印 ABC:
ESCAPE=$'\e'
echo "${ESCAPE}[0;32mABC${ESCAPE}[0m"
您还可以使用 -e 选项:
echo -e "\e[0;32mABC\e[0m"
或打印:
printf "\e[0;32mABC\e[0m\n"
在这里查看我主要在脚本中使用的一些代码。
这里有一点背景,如果你有兴趣。
正如其他人所指出的,终端响应所谓的转义序列。这些是您可以发送到终端(写入、显示)的字符序列,终端硬件不显示这些字符,而是将它们解释为执行各种操作的命令。这些东西可以是任何东西,从移动光标到闪烁,再到改变前景色和背景色。这是任何终端程序(无论是 vi、emacs、ls 还是 bash)在需要调用某些终端功能时所做的事情。
问题是有许多不同种类的终端,它们具有不同的功能,并且响应不同的转义序列。早期,人们想出了一种机制来解决这个问题。他们提出了 termcap,然后是 terminfo,这是一种抽象终端功能的方法。因此,您执行“移动光标”或“设置前景色”之类的操作,并且底层库从为不同终端维护的数据库中检索正确的转义序列(基于 TERM 环境变量的值等)。
这样你就有了著名的 curses 库。它可以让你做这一切。对于 bash 之类的东西,他们已经将此功能封装在一个您可以调用的命令中,称为 tput。手册页为您提供了如何调用它的详细信息。因此,最好不要直接使用转义序列。但是,您应该通过 tput 保持独立于您碰巧正在使用的终端。