37

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

设置

git status -s在这种情况下,特别是在将颜色传递给另一个命令时,我试图保留颜色。

diff例如,一些 git 命令和其他类似的命令grep有一个选项--color=always,但git status没有。

问题

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

4

2 回答 2

30

这是一个使用彩色输出作为示例的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"
于 2011-10-04T11:02:26.270 回答
6

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

如果要保留颜色代码,可以在终端模拟器screen或直接 logger中运行它script,将输出保存到文件中。

于 2011-10-03T22:31:06.323 回答