彩色 shell 脚本输出库

新手上路,请多包涵

我正在寻找一种确定的方式来构建生成彩色输出的 shell 脚本。

不幸的是,我很难找到合适的库或这样做的好技术。我发现了很多有用但简单的例子,比如 这样。到目前为止,我发现的最全面的指南也是 这个

在我开始编写自己的库之前,我想检查是否有人已经编写了它

如果您的解决方案不符合下面的观察结果,那不是问题。我也想阅读它,如果决定编写自己的解决方案,它可以帮助我

我的主要担忧/观察:

  • 需要安全。想要避免垃圾输出,因为并非所有终端或寻呼机/编辑器(如 less、more、vim 等)都支持彩色输出或更多样式的输出(粗体、闪烁、斜体等)
  • 需要简单易读。直接使用 ANSI 转义码 太可怕了: echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
  • 需要让我访问整个调色板以及前景和背景文本的样式。我发现的大多数示例仅使用前景文本的基本颜色。
  • 最好只使用简单的命令,如 bash 或更简单的内置命令和/或可以在大多数操作系统上找到的常用命令的 shell。例如,我可以使用 colorize ,但我需要 ruby(这有点好)并安装了 colorize gem(不好)
  • Tput 似乎是一个不错的选择,因为它可以很好地操纵 shell 光标,但它有点简单/不太灵活

编辑

在对终端控制和输出格式进行了一些研究之后,我正在写 这篇 文章试图实现这一点。到目前为止,它做得很好

原文由 Bruno Penteado 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 910
2 个回答

这是我的 dotfiles 中的一个修改片段,应该做你想做的

RCol='\e[0m'    # Text Reset

# Regular           Bold                Underline           High Intensity      BoldHigh Intens     Background          High Intensity Backgrounds
Bla='\e[0;30m';     BBla='\e[1;30m';    UBla='\e[4;30m';    IBla='\e[0;90m';    BIBla='\e[1;90m';   On_Bla='\e[40m';    On_IBla='\e[0;100m';
Red='\e[0;31m';     BRed='\e[1;31m';    URed='\e[4;31m';    IRed='\e[0;91m';    BIRed='\e[1;91m';   On_Red='\e[41m';    On_IRed='\e[0;101m';
Gre='\e[0;32m';     BGre='\e[1;32m';    UGre='\e[4;32m';    IGre='\e[0;92m';    BIGre='\e[1;92m';   On_Gre='\e[42m';    On_IGre='\e[0;102m';
Yel='\e[0;33m';     BYel='\e[1;33m';    UYel='\e[4;33m';    IYel='\e[0;93m';    BIYel='\e[1;93m';   On_Yel='\e[43m';    On_IYel='\e[0;103m';
Blu='\e[0;34m';     BBlu='\e[1;34m';    UBlu='\e[4;34m';    IBlu='\e[0;94m';    BIBlu='\e[1;94m';   On_Blu='\e[44m';    On_IBlu='\e[0;104m';
Pur='\e[0;35m';     BPur='\e[1;35m';    UPur='\e[4;35m';    IPur='\e[0;95m';    BIPur='\e[1;95m';   On_Pur='\e[45m';    On_IPur='\e[0;105m';
Cya='\e[0;36m';     BCya='\e[1;36m';    UCya='\e[4;36m';    ICya='\e[0;96m';    BICya='\e[1;96m';   On_Cya='\e[46m';    On_ICya='\e[0;106m';
Whi='\e[0;37m';     BWhi='\e[1;37m';    UWhi='\e[4;37m';    IWhi='\e[0;97m';    BIWhi='\e[1;97m';   On_Whi='\e[47m';    On_IWhi='\e[0;107m';

然后你就可以 echo -e "${Blu}blue ${Red}red ${RCol}etc...."

原文由 demure 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏