将 ls 或 tree 的输出通过管道传输到 less 会丢失颜色吗?

将 ls 或 tree 的输出通过管道传输到 less 会丢失颜色吗?

treels可以通过对文件名进行不同的着色来区分文件类型。

tree并且ls经常输出一长串文件(包括目录),因此我将 stdout 输出通过管道传输到less.

less没有保留颜色。我们如何才能让它显示颜色,或者还有其他方法吗?

刚刚看到了链接列表,但是管道到less -Rorless -r不起作用。我的操作系统是 Ubuntu 12.04。less版本 444:2011 年 6 月 9 日。

答案1

我假设您正在使用ls --color=auto,它告诉ls您在“自动”模式下使用颜色。 “自动”模式告诉ls查看 STDOUT 是否是终端,如果是,则使用颜色,否则不使用颜色。当您通过管道ls进入时less,STDOUT 不是终端,它连接到 的 STDIN less,这是一个普通管道。

解决办法,使用ls --colorls --color=always

然而现在这导致了另一个潜在的问题。根据您的情况less,它可能不会显示颜色,而是显示转义码。解决方案是使用less -R.这告诉less我们传递 ANSI 颜色转义的转义代码。您不想使用,-r因为这会导致长行环绕的问题,因为 less 无法正确计算行长度。

如此完整的解决方案:

ls --color | less -R

同样对于tree

tree -C | less -R

相关内容