可能重复:
可以通过 shell 重定向捕获彩色输出吗?
设置
git status -s
在这种情况下,特别是在将颜色传递给另一个命令时,我试图保留颜色。
diff
例如,一些 git 命令和其他类似的命令grep
有一个选项--color=always
,但git status
没有。
问题
有没有办法管道或捕获命令的输出并让它认为它正在输出到 xterm shell,所以它不会自动禁用颜色?
可能重复:
可以通过 shell 重定向捕获彩色输出吗?
git status -s
在这种情况下,特别是在将颜色传递给另一个命令时,我试图保留颜色。
diff
例如,一些 git 命令和其他类似的命令grep
有一个选项--color=always
,但git status
没有。
有没有办法管道或捕获命令的输出并让它认为它正在输出到 xterm shell,所以它不会自动禁用颜色?
这是一个使用彩色输出作为示例的script
片段(在 Mac OS X 10.6 上)。ls
# 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"
大多数打印出这些颜色代码的命令都会明确检查 stdout/stderr 是否为 tty(使用该isatty
函数)。
如果要保留颜色代码,可以在终端模拟器screen
或直接 logger中运行它script
,将输出保存到文件中。