可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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?
回答1:
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"
回答2:
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.