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

不幸的是,我很难找到一个合适的库或好的技术来实现这一点.我发现了很多有用但简单的例子,比如this个.到目前为止,我找到的最全面的指南是this one.

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

如果你的解决方案不符合下面的观察结果,那不是问题.我也想读一读,这样如果我决定写我自己的解决方案,它可以帮助我

我的主要关注/观察:

  • Needs to be safe.希望避免垃圾输出,因为并非所有终端或pager /编辑器(如less、more、vim等)都支持彩色输出或更多样式的输出(粗体、闪烁、斜体等)
  • Needs to be easy and readable.直接使用ANSI escape codes很可怕:echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
  • Needs to give me access to the whole color palette and styles表示前景和背景文本.我发现的大多数示例只对前景文本使用基本 colored颜色 .
  • Its preferable to use only simple commands类似于bash或更简单的shell,内置命令和/或大多数操作系统上可以找到的常见命令.例如,我可以使用colorize,但我需要ruby(这有点好)和colorize gem(不好)
  • 100 seems to be a good option,因为它可以很好地操作shell光标,但它有点简单/不太灵活

编辑

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

推荐答案

下面是我的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...."

Linux相关问答推荐

为什么将JAX与Docker一起安装会创建如此大的镜像?

Linux 上 Ada 任务优先级的语义是什么?

将(覆盖)文件移动到不同位置的同名文件夹中

awk 打印除最后一列以外的所有内容 + 最后一列

在 bash 中解析变量

如何使用awk或其他方法提取双引号中的子字符串?

为什么 printf 仍然可以使用低于 XMM 寄存器中 FP args 数量的 RAX?

什么是`quote`命令?

需要解释 Linux bash 内置 exec 命令行为

隐藏文件 .env 未使用 Docker COPY 复制

在 Node.JS 中引用相对于应用程序根目录的文件的正确方法

我想为 Linux 内核做贡献

将 bash 脚本添加到路径

如何下载较旧的 google play 服务?

当将信号量减为零的进程崩溃时,如何恢复信号量?

在 Unix 上计算每行/字段的字符出现次数

conda 命令会提示错误:Bad Interpreter: No such file or directory

带有日期和时间的 Linux 命令历史记录

Linux:删除多个文件的文件扩展名

如何在 docker 容器中运行 cron 作业(job)