题 管道穿过后,bash的颜色较少?


当我有dircolors定义生活充满...颜色。

当我管道 ls 通过 less 滚动我失去了颜色。

有什么建议?


93
2018-06-16 13:30






答案:


最有可能是你的 ls 别名 ls --color=auto,告诉 ls 只在输出为tty时才使用颜色。如果你这样做 ls --color (这在道德上等同于 ls --color=always),这将迫使它打开颜色。

您也可以更改别名来做到这一点,但我不会真的称之为好主意。最好与其他别名 --color

less 需求 -R也是。


95
2018-06-16 13:38



你为什么不把别名称为好主意 ls --color 要么 ls --color=always, 对于这个问题? - j08lue
@ j08lue如果你通过一个不处理颜色的命令,你得到一些可能搞乱命令的垃圾字符。例如,我做到了 ls --color=always | less 得到了: ESC[01;32mexecute_once.shESC[0m (我知道这是旧的,你可能不在乎,但对于未来的访客,这可能是有用的) - Ryan Amos
@RyanAmos作为未来的访客,谢谢。 :) - malvim


尝试使用-R选项,如下所示:

command | less -R

这对我来说像这样的单线程:

ls -la | grep --color=always bash | less -r

也是这样:

ls --color | less -R

但是你必须使用--color参数调整主输出(在这种情况下为ls的输出)。


51
2018-06-16 13:33



谢谢,这也适用于ack-grep。 ack-grep my_string --color |少-R - igniteflow
--color无法识别:ls:非法选项 - - 在osx上运行bash。 - Scott Biggs
@Scott Biggs:在OSX中没有--color;试试ls -G
@Lu-Chi,即使有 -G,颜色缺失 - Iulian Onofrei
在OS X中,当ls的输出未定向到终端时,您需要设置环境变量CLICOLOR_FORCE(对任何东西)。这对我有用:CLICOLOR_FORCE = ls -G |少-R - jooon