可能是重复问题:
能否通过shell重定向捕获彩色输出?
设置
在这种情况下,我特别想保留git status -s
中的颜色,并将其传输到另一个命令。
一些git命令,例如 diff
,以及其他命令如 grep
都有一个 --color=always
的选项,但 git status
没有。
问题
有没有办法管道或捕获命令的输出,并使它认为正在输出到xterm shell,以便自动禁用颜色?
可能是重复问题:
能否通过shell重定向捕获彩色输出?
在这种情况下,我特别想保留git status -s
中的颜色,并将其传输到另一个命令。
一些git命令,例如 diff
,以及其他命令如 grep
都有一个 --color=always
的选项,但 git status
没有。
有没有办法管道或捕获命令的输出,并使它认为正在输出到xterm shell,以便自动禁用颜色?
下面是一个使用带有颜色的ls
输出作为示例(在Mac OS X 10.6上)的script
代码片段。
# 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"
ls -G
的返回代码($?
)? - Lux-e
选项使得返回代码可以传递。 - Aiden Woodrufftr -d '\r'
? - theonlygusti大多数打印出这些颜色代码的命令会显式地检查stdout/stderr是否是终端(使用isatty
函数)。
如果您想保留颜色代码,可以在类似于screen
或直接记录器script
的终端仿真器中运行它,并将输出保存到文件中。
script
命令可以被告知写入一个变量吗? - rennat