对于 ls 命令,less 中没有彩色输出

nun*_*nos 24 osx ls less colors pipe

如果我运行,ls我会得到彩色输出,我发现它非常方便快速浏览文件类型。当我尝试通过管道将其less-r-R标记均匀时,颜色总是会丢失。我使用的是zsh5.0.7 版。有任何想法吗?谢谢。

编辑:我在 OS X 上。

Gil*_*il' 22

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

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

ls --colors=yes -l | less
Run Code Online (Sandbox Code Playgroud)

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

CLICOLOR_FORCE=1 ls -l | less
Run Code Online (Sandbox Code Playgroud)


jim*_*mij 21

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

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

ls --color=always | less -R
Run Code Online (Sandbox Code Playgroud)

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

alias ls='ls --color=always'
Run Code Online (Sandbox Code Playgroud)

  • @nunos `ls` 不是来自 `bash`,它是一个独立的程序。运行 `ls --version` 以检查其版本。我的是 ls *GNU coreutils) 8.21*。 (5认同)