很多 shell 工具(例如 grep 和 ls)可以在终端中打印彩色文本。当输出重定向到常规文件时,表示颜色的转义序列将被删除,并且仅将纯文本写入文件。如何实现?
用途:
if [ -t 1 ]
测试
stdout
是否连接到终端。如果是,则打印转义序列,否则仅打印纯文本。
具体来说,
grep
有一个命令行开关来调整此设置:
echo hello | grep ll # "ll" is printed in red
echo hello | grep --color=never ll # "ll" is printed without special colouring
大多数(如果不是全部)执行此类操作的工具都会有类似的开关 -
ls
确实如此。检查其他工具的联机帮助页。
对于自动检测
stdout
是否连接到终端的工具,另一种方法是通过管道输出来欺骗它们 cat
:
echo hello | grep ll | cat # "ll" is printed without special colouring
前几天我遇到了同样的问题,并意识到我的
.bashrc
中有以下内容
alias grep='grep --color=always'
我将其更改为以下内容,没有进一步的问题
alias grep='grep --color=auto'