43

Possible Duplicate:
Can colorized output be captured via shell redirect?

setup

In this case specifically I'm trying to preserve the colors in git status -s when piping it to another command.

Some git commands, diff for instance, and other commands like grep have an option --color=always but git status does not.

question

Is there a way to pipe or capture the output of a command and make it think it is outputting to the xterm shell so it doesn't automatically disable colors?

Community
  • 1
  • 1
rennat
  • 2,529
  • 3
  • 26
  • 30
  • I would say the easiest way is to pass a configuration paramter like: git -c 'color.ui=always' status | more -R – joynes Mar 27 '14 at 16:21

2 Answers2

34

Here's a script snippet using the colorized output of ls as an example (on 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"
vego
  • 364
  • 2
  • 2
7

Most commands that do print out those color codes explicitly check if stdout/stderr is a tty (using the isatty function).

If you want to preserve the color codes, you can run it within a terminal emulator like screen or the direct logger script, saving the output to a file.

czerny
  • 15,090
  • 14
  • 68
  • 96
Foo Bah
  • 25,660
  • 5
  • 55
  • 79