gow*_*eon 8 bash colors tty less pipe
当您通过管道less传输某些内容时,程序通常会丢弃颜色代码,因为它不会输出到 TTY。因此,您必须添加--color=always选项才能使其工作。
ls -l --color=always | less
grep -R asdf --color=always | less
Run Code Online (Sandbox Code Playgroud)
更糟糕的是,有时甚至不支持该选项,因此实际上无法强制将颜色输出到管道。
有没有(相对)简单的方法来减少对 TTY 的模拟,这样我就不必--color=always在通过管道传输到每个程序时指定每个程序,并且它会在可能的情况下自动显示颜色输出?
gar*_*ohn 22
不是less那个需要改变。其他程序的输出被重定向到管道。这些程序检测到它们的输出没有被发送到 tty 并且它们禁用它们的着色。即使重定向到管道,您也不得不对源程序做一些特殊的事情来为它们的输出着色。
我想我对不支持 --color=always 选项的程序有一个解决方案。该unbuffer命令创建一个 pty 并将其参数程序的输出发送到该 pty,因此参数程序认为其输出将发送到 tty 并为其着色。
我尝试了以下作为实验,它奏效了。我想不出任何默认情况下为输出着色的程序。
$ unbuffer ls --color=auto | cat
Run Code Online (Sandbox Code Playgroud)
另外,您不是必须使用-rwith 选项less才能显示颜色吗?我也试过这个:
$ unbuffer ls --color=auto | less -r
Run Code Online (Sandbox Code Playgroud)