如何自动为bash shell中的程序输出着色?

Lin*_*Lin 8 bash pipe colors

我想把任何输出到屏幕的程序,捕获输出,并在某些关键字输出到屏幕之前着色.例如,这是正常的程序输出:

bash# <program>
blah blah blah       <-- this output has no color
Run Code Online (Sandbox Code Playgroud)

bash# <program>
blah blah blah       <-- this output is colorful
Run Code Online (Sandbox Code Playgroud)

理想情况下,程序是什么并不重要.我只是想找到一种将更多颜色融入我的konsoles的好方法.

编辑:对不起,应该已经清楚了.我不是要尝试着色shell脚本输出.

eph*_*ent 7

#!/bin/sh
redf=$(tput setaf 1)
redb=$(tput setab 1)
reset=$(tput op)
echo "${redf}red${reset} in front, ${redb}red${reset} in back"
Run Code Online (Sandbox Code Playgroud)

有关终端功能的详细列表,请参阅terminfo.$TERM带后缀-m(例如ansi-m)的A 表示屏幕是单色的,但只要颜色有效,以下字符串功能应该是非空的:

       enter_bold_mode               bold         md        turn on bold (extra
                                                            bright) mode
       enter_italics_mode            sitm         ZH        Enter italic mode
       enter_reverse_mode            rev          mr        turn on reverse
                                                            video mode
       orig_pair                     op           op        Set default pair to
                                                            its original value
       set_a_background              setab        AB        Set background
                                                            color to #1, using
                                                            ANSI escape
       set_a_foreground              setaf        AF        Set foreground
                                                            color to #1, using
                                                            ANSI escape

颜色0-7非常标准:黑色,红色,绿色,黄色,蓝色,品红色,青色,白色.除此之外可能不存在或可能更多变.


Pet*_*aat 5

ACK方案是一个版本的grep,做正则表达式的颜色突出显示其输出相匹配.您可以使用它为您进行着色,或者您可以研究它的Perl代码.

另一种选择是使用--color=always--color=auto参数传递给GNU的grep .