【问题标题】:bash command preserve color when piping [duplicate]bash命令在管道时保留颜色[重复]
【发布时间】:2011-11-30 06:45:07
【问题描述】:

可能重复:
Can colorized output be captured via shell redirect?

设置

在这种情况下,特别是在将git status -s 传递给另一个命令时,我会尝试保留颜色。

一些 git 命令,例如 diff,以及像 grep 这样的其他命令有一个选项 --color=always,但 git status 没有。

问题

有没有办法通过管道或捕获命令的输出并让它认为它正在输出到 xterm shell,因此它不会自动禁用颜色?

【问题讨论】:

  • 我想说最简单的方法是传递一个配置参数,例如: git -c 'color.ui=always' status |更多-R

标签: bash colors pipe xterm


【解决方案1】:

这是一个script sn-p,以ls 的彩色输出为例(在 Mac OS X 10.6 上)。

# no colored ls output if stdout is a pipe (and not a tty)
ls -G /
ls -G / | cat
script -q /dev/null ls -G / | tr -d '\r' | cat

# write output of script command to a variable
var="$(script -q /dev/null ls -G / | tr -d '\r' | cat)"
echo "$var"

【讨论】:

  • 这正是我要找的东西,谢谢伙计
  • 这不是更容易吗? serverfault.com/a/26521/50948
  • @paradroid - "ls" 更容易,但某些程序可能没有强制着色的选项。
  • UUOC?
  • 使用你的例子,我如何保存ls -G的返回码($?)?
【解决方案2】:

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

如果您想保留颜色代码,您可以在终端模拟器(如 screen 或直接记录器 script)中运行它,并将输出保存到文件中。

【讨论】:

  • 可以告诉script 命令写入变量吗?
  • @rennat 你可以保存到一个临时文件,然后从文件中读取到一个变量中。
猜你喜欢
  • 2015-11-05
  • 2017-01-07
  • 2023-03-15
  • 2011-01-20
  • 2012-02-08
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多