程序检测其输出上的管道以禁用着色

Lev*_*ans 5 linux bash pipe

有些程序有彩色输出(例如grepemerge在我的 gentoo 系统上),但如果它们的输出通过管道传输到less例如或文件中,则彩色输出将被禁用。

然而,我知道less能够显示彩色输出,如命令

ccze -A < /var/log/emerge.log | less
Run Code Online (Sandbox Code Playgroud)

显示彩色文本。所以我这里有两个问题:

  • 是否有可能“欺骗”其他彩色输出程序来保持颜色?
    我想保留颜色,例如:

    emerge -puND world | less
    
    Run Code Online (Sandbox Code Playgroud)
  • 这些程序如何检测它们的输出被重定向?

M K*_*M K 5

来自 stackoverflow - 检测 tty

大多数打印出这些颜色代码的命令都会显式检查 stdout/stderr 是否为 tty(使用 isatty 命令)。

来自 stackoverflow - 关于捕获彩色输出

捕获彩色输出的一种方法是使用script命令。运行script将启动一个 bash 会话,其中所有原始输出都被捕获到一个文件(默认情况下名为 typescript)。

请参阅man script获取更多信息。