如果我运行,ls
我会得到彩色输出,我发现这对于快速浏览此类文件非常方便。当我尝试将其less
与-r
和-R
标志进行管道连接时,颜色总是会丢失。我使用的是zsh
5.0.7版本。有任何想法吗?谢谢。
编辑:我在 OS X 上。
答案1
这是设计使然:产生彩色输出的程序通常仅在其输出到达终端时才这样做,而不是在将其发送到管道或常规文件时才这样做。原因是,在终端上发送的数据可能是由人类读取的,而通过管道传输到程序或写入文件的数据很可能由某些程序解析,因此它不应该包含无关的内容,例如变色转义序列。
当您传递选项(或)时, GNUls
在终端上显示彩色输出。要强制彩色输出而不管标准输出的文件类型如何,请传递or (它们是同义词)。其他命令也遵循此约定,例如 GNU grep、FreeBSD grep等。--color
--color=auto
--color=always
--color=yes
git 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'