2013-09-01 76 views
2

我看到有人可以使bash shell中的输出显示为五颜六色。不仅要突出显示错误或警告,还要执行'ls'时的目录。如何让bash shell显示丰富多彩的文字?

有没有人可以告诉我如何做到这一点?非常感谢。

+1

看看这个链接:http://stackoverflow.com/questions/2437976/get-color-output-in-bash – user000001

回答

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代码使用。

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

ls具体情况:

如果您使用的Linux发行版,几乎全部来与牛奶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环境变量的值等)。

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

相关问题