发球台指挥总是等待EOF吗?

时间:2008-09-20 00:32:02

标签: command-line cygwin

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

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

麻烦的是tee似乎坚持在向stdout或日志文件输出任何内容之前等待文件结束。这消除了所有这一切,即有一个日志文件供将来参考,还有一些stdout日志记录,所以我可以很容易地看到构建进度。

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

3 个答案:

答案 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