如何自定义命令输出的 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 terminfo
和man 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 多个预制定义文件。