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

问题描述 投票:0回答:3

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

bash redirect colors escaping
3个回答
5
投票

用途:

if [ -t 1 ]

测试

stdout
是否连接到终端。如果是,则打印转义序列,否则仅打印纯文本。


3
投票

具体来说,

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

0
投票

前几天我遇到了同样的问题,并意识到我的

.bashrc

中有以下内容
alias grep='grep --color=always' 

我将其更改为以下内容,没有进一步的问题

alias grep='grep --color=auto'
© www.soinside.com 2019 - 2024. All rights reserved.