我看到有人可以让bash shell中的输出显示出色彩鲜艳。执行'ls'时,不仅要突出显示错误或警告,还要突出显示目录。
有谁能告诉我如何制作它?非常感谢。
答案 0 :(得分: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
答案 1 :(得分:1)
在ls
:
如果您使用的是Linux发行版,几乎所有发行版都带有gnu ls
,您可能已经有了彩色输出。如果不这样做,请尝试ls -C
或ls --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
使用示例:
这将以绿色文字打印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来使你保持独立于你正在使用的终端。