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 上找到,并作为colorls
OpenBSD 和 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)