我想将命令的输出记录到stdout
以及日志文件。我已经安装了Cygwin,我正在尝试使用tee
命令来完成此任务。
devenv mysolution.sln /build myproject "Release|Win32" | tee build.log
麻烦的是tee
似乎坚持在向stdout
或日志文件输出任何内容之前等待文件结束。这消除了所有这一切,即有一个日志文件供将来参考,还有一些stdout
日志记录,所以我可以很容易地看到构建进度。
tee
的选项似乎仅限于--append
,--ignore-interrupts
,--help
和--version
。那么有另一种方法来达到我想要做的事情吗?
答案 0 :(得分:4)
您可以输出到文件并尾随文件。
devenv mysolution.sln / build myproject“Release | Win32”> build.log&
tail -f build.log
答案 1 :(得分:2)
自己写! (这里的重点是autoflush($|
)设置已打开,因此所看到的每一行都会立即刷新。这可能是真正的tee
命令所缺少的。)
#!/usr/bin/perl -w
use strict;
use IO::File;
$| = 1;
my @fhs = map IO::File->new(">$_"), @ARGV;
while (my $line = <STDIN>) {
print $line;
$_->print($line) for @fhs;
}
$_->close for @fhs;
您可以随意调用脚本。我称之为perlmilktee
! :-P
答案 2 :(得分:2)
发球似乎坚持等待 在输出任何内容之前的文件结尾 到标准输出或日志文件。
绝对不会发生这种情况 - 它会使发球区几乎无用。这是我写的一个简单的测试,它将这个测试,并且它绝对不等待eof。
$ cat test
#!/bin/sh
echo "hello"
sleep 5
echo "goodbye"
$ ./test | tee test.log
hello
<pause>
goodbye