bash command preserve color when piping [duplicate]

匿名 (未验证) 提交于 2019-12-03 01:36:02

问题:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!