我看过几个答案,但他们都在谈论echo
。如何更改 bash 中命令输出的颜色?例如,我想对hostname
命令的输出进行着色。
$ hostname
Nameofcomputer <--- Just the output to be colored and then it returns to default color of the shell.
答案1
感谢@finefoot 的建议,这段代码似乎可以工作。
#!/bin/bash
case $1 in
red) col=$'\e[1;31m' ;;
green) col=$'\e[1;32m' ;;
yellow) col=$'\e[1;33m' ;;
blue) col=$'\e[1;34m' ;;
magenta) col=$'\e[1;35m' ;;
cyan) col=$'\e[1;36m' ;;
esac
printf "%s" "${col}"
shift
exec "$@"
用法
假设它被称为set-color
,只需用 来调用它set-color red hostname
。
解释
- 根据 jasonwryan 的回答,案例块定义了颜色这里。
- 该脚本使用 来设置此颜色
printf
。 shift
删除输入到脚本的第一个选项(即颜色)。exec "$@"
然后执行脚本的其余部分。
答案2
有些程序已经可以为您执行此操作,例如grc
,这是一个
通用着色器,可用于对日志文件、命令输出、任意文本进行着色......通过正则表达式配置。
[我通常不喜欢使用文本图像,但我不认为 StackExchange 有颜色格式选项]
或者还有source-highlight
。
看是否有着色器实用程序可以获取命令输出并根据预定义的方案对其进行着色?也适用于超级用户
答案3
tput setaf 1; hostname; tput sgr0
tput
查询终端数据库对应的能力。这里是setaf
为了设置 ANSI 颜色 1(红色),sgr0
至选择图形呈现 无返回默认属性。除了 之外tput sgr0
,您还可以使用tput op
(原始对) 仅重置背景和前景色,而保留其他图形属性(粗体、下划线、突出、反转...)。
有些 shell 像zsh
,tcsh
或fish
具有内置支持来查询数据库或将颜色名称映射到 ANSI 代码(例如zsh
或fish
), 但不是bash
。
在 中zsh
,使用提示符扩展来打印 中的主机名red
:
print -P '%F{red}%m%f'
(%f
仅重置前景色)
在内置程序中tcsh
或zsh
与echotc
内置程序一起使用 termcap 代码而不是 terminfo:
echotc AF 1; hostname; echotc me
(对于 terminfo 代码 setab/sgr0 像现代版本一样zsh
)。echoti
tput
在 中zsh
,%
参数扩展标志在参数扩展时打开提示扩展,因此您可以执行以下操作:
red=%F{red} normal=%f
echo ${(%)red}whatever%{(%)normal}
在 中zsh
,您还可以找到一个colors
可自动加载的函数,您可以运行该函数来让助手以彩色方式书写内容:
autoload colors; colors
echo $fg[red]whatever$fg[default]