bash命令在管道时保留颜色

ren*_*nat 31 bash pipe colors xterm

可能重复:
可以通过shell重定向捕获彩色输出吗?

建立

在这种情况下,特别是我试图在将git status -s它管道到另一个命令时保留颜色.

diff例如,某些git命令和其他命令grep有一个选项,--color=alwaysgit status没有.

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

小智 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"
Run Code Online (Sandbox Code Playgroud)

  • 这不容易吗?http://serverfault.com/a/26521/50948 (2认同)
  • @paradroid - "ls"更容易,但某些程序可能没有强制着色的选项. (2认同)

Foo*_*Bah 5

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

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