bash命令在管道时保留颜色

时间:2011-10-03 22:28:09

标签: bash colors pipe xterm

  

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

设置

在这种情况下,我特意试图在将git status -s换成另一个命令时保留diff中的颜色。

某些git命令,例如grep和其他命令(如--color=always)有git status选项但{{1}}没有。

问题

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

2 个答案:

答案 0 :(得分:27)

以下是使用script的彩色输出的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"

答案 1 :(得分:5)

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

如果要保留颜色代码,可以在screen或直接记录器script等终端仿真器中运行,将输出保存到文件中。