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

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

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

但是,我知道less能够显示彩色输出,例如

ccze -A < /var/log/emerge.log | less

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

  • 是否可以“欺骗”其他彩色输出程序以保留颜色?
    如果我这样做,我想保留颜色,例如:

    emerge -puND world | less
    
  • 这些程序如何检测它们的输出被重定向?

答案1

来自 stackoverflow - 关于检测 tty

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

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

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

请参阅man script以了解更多信息。

相关内容