重定向时自动删除转义序列

时间:2014-03-20 04:23:04

标签: bash redirect colors escaping

许多shell工具(如grep和ls)可以在终端中打印彩色文本。当输出重定向到常规文件时,将删除表示颜色的转义序列,并且只将纯文本写入文件。如何实现?

3 个答案:

答案 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'