我正在寻找一个明确的方式来构建shell脚本,生成彩色输出。
不幸的是,我很难找到一个合适的库或好的技术来做到这一点。我发现了很多有用但简单的例子,如this。而且到目前为止,我发现的最全面的指南是this one。
在开始编写自己的库之前,我想检查一下是否有人已经编写了它
如果你的解决方案不符合下面的观察,那不是问题。我也想读一读,这样它就可以帮助我,如果决定写我自己的解决方案
我的主要关注/观察:
*需要安全。希望避免垃圾输出,因为并非所有终端或寻呼机/编辑器(如less,more,vim等)都支持彩色输出或更有风格的输出(粗体, Flink ,斜体等)
*需要简单易读。直接使用ANSI转义码是可怕的:echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
*需要给予我访问整个调色板和样式的前景和背景文本。我发现的大多数例子只使用基本颜色的前景文本。
*最好只使用简单的命令如bash或更简单的shell内置命令和/或常见命令,可以在大多数操作系统上找到。例如,我可以使用colorize,但我需要安装ruby(这有点确定)和colorize gem(不确定)
*Tput似乎是一个不错的选择,因为它可以很好地操作shell光标,但它有点简单/不太灵活
编辑
在对终端控制和输出格式进行了一些研究之后,我正在写这个gist,试图实现这一点。到目前为止,它做得相当不错
9条答案
按热度按时间ipakzgxi1#
下面是我的dotfiles中经过修改的代码片段,它应该可以满足您的要求
然后你可以只
echo -e "${Blu}blue ${Red}red ${RCol}etc...."
brccelvz2#
http://techietent.blogspot.in/2013/03/how-to-echo-colored-text-in-linux-shell.html
xmakbtuz3#
我从Demure的列表中获得灵感,并对其进行了一些修改。(并将
\e
更改为十六进制\x1B
,因为自Snow Leopard以来,OS X的www.example.com不支持前者Terminal.app。)以下是我的想法:BR_
颜色是“明亮”或“高强度”的颜色。这样做,您甚至可以将它们与其他字体样式混合使用。(例如,带下划线的亮白色)如果你想收藏这篇文章,我为它做了一个要点:https://gist.github.com/ian128K/39a490e5aa8d3bb77a8b
11dmarpk4#
无耻的插头...检查Rainbow.sh
用途
只需导入rainbow.sh并开始使用脚本中的可用函数。
at0kjp5o5#
tput
可以处理的内容比您链接到的页面上显示的要多。tput
所做的就是根据当前终端的termcap/terminfo数据库中显示的内容,输出您将在echo
语句中包含的字符。一些示例:你可以像使用gist中定义的变量一样使用它;事实上,您可以使用它以便携方式创建要点:
k5ifujac6#
我个人在我的xcol工具中使用这些,我使用AndreasSchamanek代码作为参考开发。
我在脚本中使用这些变量,如下所示
查看我的xcol工具,了解想法和示例
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
roejwanj7#
以防有人来这里寻找一个shell过滤器来着色输出,Alexey Gladkov在libshell中潜伏着一个POSIX shell实现
utils/cgrep
(它以一种非常防御的方式设计),以及他用golang编写的更复杂的cfilter。1wnzp6jl8#
只是一个快速添加到这个使用所有的真棒答案在这个线程,但也增加了对
--no-color
标志和NO_COLOR
环境变量的支持。然后,您可以在echo中使用这些,如下所示:
要禁用输出,您可以
export NO_COLOR=true
禁用整个会话的颜色,或者将标志添加到单独的脚本调用./myscript.sh --no-color
这个添加是从https://no-color.org/中提示的,并且一些看到颜色代码出现在日志和文件输出中的经验使它们难以阅读。当您期望非控制台介质将涉及时,这些标志包裹在颜色定义周围,可以很容易地从脚本中关闭颜色输出。
我还扩展了颜色名称的可读性,希望你有一个bit of an IDE,以帮助编写脚本;所以长度不如可读性重要。我甚至保留了美国的
color
😉我不是一个Bash/shellMaven,所以请让我知道你发现的任何问题;但我希望这能帮助一些人!
lf3rwulv9#
你可以使用
colors.sh
。首先你必须将colors.sh
源代码添加到你的脚本中,然后你可以像下面这样使用echo
:有两种方法。第一种是使用函数,第二种是使用常量。您可以选择最适合您的方法。