ls -l --color=auto | tee output.log
没有管道/三通,它是彩色的。如何使它在使用时保持彩色tee
(只能在屏幕上彩色,我不在乎日志中的颜色)。
已经在Unix&Linux上问过。
—
Dan Dascalescu
ls -l --color=auto | tee output.log
没有管道/三通,它是彩色的。如何使它在使用时保持彩色tee
(只能在屏幕上彩色,我不在乎日志中的颜色)。
Answers:
只需unbuffer
在任何命令之前插入,就可以认为它正在写入交互式输出,即使它实际上正在传递到另一个可执行文件中。如果使用,将保留颜色ls
。
例如
unbuffer ls -l --color=auto | tee output.log
如果尚未安装,则可以在Ubuntu和其他Debian-ish Linux发行版上进行安装unbuffer
。
sudo apt-get install expect-dev
xcodebuild
-而是我切掉了没有颜色的行。 unbuffer xcodebuild | less -R
完美地工作。
expect-dev
包装。expect
足够。
使用ls选项 --color=always
--color=auto
不会将输出颜色着色到管道-显而易见的原因。
主页上显示以下内容:
使用--color = auto时,仅在将标准输出连接到端子(tty)时才输出颜色代码。
ls -l
只是一个例子。我有一个完全不同的命令(heroku日志),该命令在通过管道传递到时会剥离颜色tee
。我想“修复/更改” Tee /管道,而不是我正在执行的命令。
ls
。请参阅我的解决所有程序问题的答案,包括heroku日志。
我将扩展script
已接受答案的注释中给出的解决方案。script
在您可能不想或不想安装包含命令的期望软件包的情况下,使用可能会有用unbuffer
。
使用颜色代码ls
将输出打印到标准输出和文件:
script -efq output.log -c "ls -l --color=auto"
其中(man script
):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
查看带有颜色的输出文件:
less -r output.log
-e
与--return
-不需要两者相同;-efq
是--return --flush --quiet
。