4

我想将命令的输出记录stdout到日志文件中。我已经安装了 Cygwin,我正在尝试使用该tee命令来完成此操作。

devenv mysolution.sln /build myproject "Release|Win32" | tee build.log

麻烦的是,这tee似乎坚持等待文件结束,然后再将任何内容输出到stdout日志文件或日志文件。这消除了这一切的重点,即有一个日志文件以供将来参考,还有一些stdout日志记录,以便我可以轻松查看构建进度。

tee的选项似乎仅限于--append--ignore-interrupts--help--version。那么还有另一种方法可以达到我想要做的事情吗?

4

3 回答 3

4

您可以输出到文件和 tail -f 文件。

devenv mysolution.sln /build myproject "Release|Win32" > build.log &

尾 -f build.log

于 2008-09-20T00:35:05.683 回答
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

于 2008-09-20T00:37:18.157 回答
2

tee 似乎坚持在将任何内容输出到标准输出或日志文件之前等待文件结束。

这绝对不应该发生 - 它会使 tee 几乎无用。这是我写的一个简单的测试,它对它进行了测试,它绝对不是在等待 eof。

$ cat test
#!/bin/sh
echo "hello"
sleep 5
echo "goodbye"

$ ./test | tee test.log
hello
<pause>
goodbye
于 2008-09-20T14:49:49.027 回答