自定义 BASH 输出颜色?

自定义 BASH 输出颜色?

如何自定义命令输出的 bash 颜色?

例如,我运行ls并希望目录和文件具有不同的颜色。我该如何实现?我看到发行版正在这样做,但我找不到有关使用OUTPUT其他命令着色的任何文档。

答案1

这不是你的 shell 能做的事情。颜色是通过特殊控制字符生成的。你的终端仿真器需要将它们转换成实际颜色。

对于ls,您需要设置

  • LSCOLORS(FreeBSD、OS X、..)或
  • LS_COLORS(Linux)。

请参阅此处发电机LS_COLORS.然后你可以调用

  • ls --color(Linux)
  • ls -G或设置CLICOLOR环境变量(BSD 变体)。

剩下的就看你的终端模拟器了。例如,我的 iTerm2 配置如下:

答案2

我终于能够得到这个问题的答案,它完全符合我的预期。

对于那些对细节感兴趣的人,请参阅man terminfoman termcap手册页。这些手册页布局终端功能和您可以设置的环境变量,允许您自定义任何命令输出的颜色。

其中一个例子就是有彩色的手册页:

man() {
    env LESS_TERMCAP_mb=$'\E[01;31m' \
    LESS_TERMCAP_md=$'\E[01;38;5;202m' \
    LESS_TERMCAP_me=$'\E[0m' \
    LESS_TERMCAP_se=$'\E[0m' \
    LESS_TERMCAP_so=$'\E[0;1;4;38;5;82m' \
    LESS_TERMCAP_ue=$'\E[0m' \
    LESS_TERMCAP_us=$'\E[04;38;5;51m' \
    man "$@"
}

上述变量将应用于man执行时的环境,从而在man页面中提供颜色。这些变量也可以应用于其他命令(假设它terminfo正确使用输出字段)。

答案3

也许您可以检查一下包装器,例如。连续波

cw 是 GNU/linux 上常见的基于 unix 的命令的非侵入式实时 ANSI 颜色包装器。cw 旨在模拟正在执行的命令的环境,因此,如果某人在其 shell 中键入“du”、“df”、“ping”等,它将根据包含所需颜色格式的定义文件自动实时为输出着色。cw 支持通配符匹配着色、标记着色、页眉/页脚、案例场景着色、命令行相关定义着色,并包含 50 多个预制定义文件。

相关内容