ls 命令的 less 中没有彩色输出

ls 命令的 less 中没有彩色输出

如果我运行,ls我会得到彩色输出,我发现这对于快速浏览此类文件非常方便。当我尝试将其less-r-R标志进行管道连接时,颜色总是会丢失。我使用的是zsh5.0.7版本。有任何想法吗?谢谢。

编辑:我在 OS X 上。

答案1

这是设计使然:产生彩色输出的程序通常仅在其输出到达终端时才这样做,而不是在将其发送到管道或常规文件时才这样做。原因是,在终端上发送的数据可能是由人类读取的,而通过管道传输到程序或写入文件的数据很可能由某些程序解析,因此它不应该包含无关的内容,例如变色转义序列。

当您传递选项(或)时, GNUls在终端上显示彩色输出。要强制彩色输出而不管标准输出的文件类型如何,请传递or (它们是同义词)。其他命令也遵循此约定,例如 GNU grep、FreeBSD grep等。--color--color=auto--color=always--color=yesgit diff

ls --colors=yes -l | less

对于 FreeBSD 版本ls(也可在 OSX 上找到,并可作为OpenBSD 和 NetBSD 上的端口使用),在输出为终端时colorls传递显示颜色的选项。-G设置环境CLICOLOR_FORCE以显示颜色,无论输出文件类型如何。

CLICOLOR_FORCE=1 ls -l | less

答案2

最有可能的问题是您的ls程序设置了选项--color=auto,这基本上意味着只有在连接到终端时输出才应该着色,否则(输出连接到管道或文件)不会发出颜色。

如果你想要有颜色,在这种情况下你应该将--color选项设置为always,所以尝试

ls --color=always | less -R

如果这种行为是您一直期望的,那么只需创建别名:

alias ls='ls --color=always'

答案3

我无法评论 @jimmij 的答案,因为我的代表人数还不到 50,但我想解释一下 Bash 中对我有用的内容。

如果你跑

$ man ls | grep color

man您将看到特定 shell 环境(在我们的例子中)的 -page的所有条目bash

对我来说,以下调整起到了作用:

$ alias ls='ls -G'

相关内容