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