ls -l --color=auto | tee output.log
如果没有管道/三通,它就是彩色的。我怎样才能让它在使用时保持彩色tee
(只能在屏幕上着色,我不关心日志中的颜色)。
答案1
只需在任何命令前插入unbuffer
,即可使其认为正在写入交互式输出,即使它实际上是通过管道传输到另一个可执行文件中。这样可以保留颜色ls
。
例如
unbuffer ls -l --color=auto | tee output.log
如果您尚未安装它,您可以在 Ubuntu 和其他 Debian-ish Linux 发行版上unbuffer
通过以下方式安装。
sudo apt-get install expect-dev
答案2
使用 ls 选项--color=always
--color=auto
不会将颜色输出到管道-原因很明显。
手册ls
页内容如下:
使用 --color=auto 时,仅当标准输出连接到终端 (tty) 时才会输出颜色代码。
答案3
我将扩展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
答案4
这是一个基于的函数这个干净的答案我无法在评论中发表意见。
output()
{
output_file=$1
shift
command=$@
script -efq $output_file -c "$command"
less $output_file
}
用法
output file command