我看到有人可以让bash shell的输出显示为彩色的。不仅可以突出显示错误或警告,还可以在执行“ls”时突出显示目录。
有人能告诉我如何做吗?非常感谢。
我看到有人可以让bash shell的输出显示为彩色的。不仅可以突出显示错误或警告,还可以在执行“ls”时突出显示目录。
有人能告诉我如何做吗?非常感谢。
这些东西从DOS时代就存在了。使用ANSI转义序列或代码:
http://wiki.bash-hackers.org/scripting/terminalcodes
示例用法:
这将以绿色文本打印ABC:
ESCAPE=$'\e'
echo "${ESCAPE}[0;32mABC${ESCAPE}[0m"
echo -e "\e[0;32mABC\e[0m"
printf "\e[0;32mABC\e[0m\n"
查看我在脚本中主要使用的一些代码这里。
示例:
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 -G
获取彩色 ls
输出,但您可能需要设置 $LSCOLORS
。此外,您可能需要执行 export CLICOLOR=1
以便终端显示颜色。更多信息,请参见this answer">附属站点上的内容。
以下是一些背景信息,如果您感兴趣的话。
正如其他人所指出的那样,终端响应所谓的转义序列。这些是您可以发送到终端(写入、显示)的字符序列,终端硬件会将它们解释为执行各种操作的命令,而不是显示这些字符。这些操作可能是从移动光标、闪烁到更改前景和背景颜色等任何内容。当任何终端程序需要调用某些终端功能时(无论是vi、emacs、ls还是bash),都要做这些事情。
问题在于有许多不同种类的终端,它们具有不同的功能并响应不同的转义序列。早期,人们想出了一种处理这个问题的机制。他们提出了termcap,然后是terminfo,这是一种抽象终端功能的方法。因此,您可以执行“移动光标”或“设置前景色”之类的操作,底层库将从为不同终端维护的数据库中检索正确的转义序列(基于TERM环境变量的值等等)。
因此,你有著名的curses库。它可以讓你做所有這些事情。對於像bash這樣的東西,他們已經將這個功能封裝在一個叫做tput的命令中,你可以調用它。man page give you the details 會告訴你如何調用它。所以,最好不要直接使用轉義序列,而是通過tput進行,這樣你就可以獨立於你正在使用的終端。